如何判断标签是否包含值或另一个标签?

5

我将使用Java中的DOM表示法。

如何区分XML标记是否具有内部值或另一个嵌入式标记? 例如,我可以有:

<item> 2 </item>

或者

<item> <name> item1 </name> </item>

i want to do the following

if(condition1 : there is no tags inside item tag) do ...
else  do ...

如何编写条件1?

childElementCountx.childElementCount(其中 x 是对您的元素的引用)。如果返回零,则该元素没有子元素。 - Šime Vidas
@Šime Vidas,这还没有被纳入Java DOM API的实现中,是吗? - phihag
3个回答

4
您可以通过遍历子节点列表来测试每个子节点:
public static boolean hasChildElements(Element el) {
    NodeList children = el.getChildNodes();
    for (int i = 0; i < children.getLength(); i++) {
        if (children.item(i).getNodeType() == Node.ELEMENT_NODE) {
            return true;
        }
    }
    return false;
}

条件1为(! hasChildElements(el))

另外,您可以使用getElementsByTagName("*").getLength() == 0来实现测试。但是,如果存在子元素,则此方法将遍历您正在测试的整个片段,并分配大量内存。


2

ElementNodes拥有 getElementsByTagName方法。用字符串'*'作为参数调用此方法(以匹配所有标签名),然后计算结果的数量。如果大于零,则存在子元素。


3
如果在大型文档的根目录调用它,这将需要很长时间并分配大量内存。 - phihag

1
NodeList nl = docEle.getElementsByTagName("item");
nl.getChildNodes();

你可以遍历childNodes来获取nodeType,如果nodeType是文本,那么你就可以设置你的条件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接