0

我想获取 xml 中具有特定名称的元素的数量,例如。名称=“同时”)

问题是,如果我使用以下代码——我只会得到具有此名称的顶级元素——

       for ( Iterator i = root.elementIterator( "while" ); i.hasNext(); ) {
            Element foo = (Element) i.next();

但是任何较低级别的“while”元素都不是迭代器的一部分......

获取具有 name="while" 的所有元素(无论是顶级还是低级)的最有效方法是什么?为此,我是否必须解析文档中的所有元素?

4

3 回答 3

1

您可以为此使用 XPath//whilename()函数和通配符节点*//*[name() = 'while']

List list = document.selectNodes("//*[name() = 'while']"); // or "//while"
int numberOfNodes = list.size();
for (Iterator iter = list.iterator(); iter.hasNext(); ) {
    // do something
}
于 2012-06-11T13:44:19.087 回答
1

这个正则表达式对我有用:

document.selectNodes(".//*")
于 2016-11-29T14:28:57.240 回答
0

Element Iterator 仅适用于 xPath 中的下一级。为了能够解析所有 XML 并获取所有元素,您必须使用一些递归。例如,下一个代码将返回具有“名称”的所有节点的列表

public List<Element> getElementsByName(String name, Element parent, List<Element> elementList)
{
    if (elementList == null)
        elementList = new ArrayList<Element>();

    for ( Iterator i = parent.elementIterator(); i.hasNext(); ) {
        Element current = (Element) i.next();
        if (current.getName().equalsIgnoreCase(name))
        {
            elementList.add(current);
        }

        getElementsByName(name, current, elementList);
    }
    return elementList;
}
于 2014-09-15T11:18:59.563 回答