dom4j-java-如何获取root中具有特定元素名称的所有元素(父元素或子元素)

时间:2012-06-11 13:36:56

标签: java xml dom4j

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

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

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

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

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

3 个答案:

答案 0 :(得分:1)

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

List list = document.selectNodes("//*[name() = 'while']"); // or "//while"
int numberOfNodes = list.size();
for (Iterator iter = list.iterator(); iter.hasNext(); ) {
    // do something
}

答案 1 :(得分:1)

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

POST /xxx HTTP/1.1

答案 2 :(得分:0)

Element Iterator仅适用于xPath中的下一级。为了能够解析所有XML并获取所有Element,您必须使用一些递归。例如,下一个代码将使用" name"

返回所有节点的列表
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;
}