首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dom4j-java-如何获取根目录中具有特定元素名称的所有元素(父元素或子元素

问dom4j-java-如何获取根目录中具有特定元素名称的所有元素(父元素或子元素
EN

Stack Overflow用户
提问于 2012-06-11 21:36:56
回答 3查看 10.1K关注 0票数 0

我想要获取xml中具有特定名称的元素的数量,例如。name="while")

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

代码语言:javascript
复制
       for ( Iterator i = root.elementIterator( "while" ); i.hasNext(); ) {
            Element foo = (Element) i.next();

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

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

EN

回答 3

Stack Overflow用户

发布于 2012-06-11 21:44:19

为此,可以使用XPath,也可以使用//while或name()函数和一个通配符节点*://*[name() = 'while']

代码语言:javascript
复制
List list = document.selectNodes("//*[name() = 'while']"); // or "//while"
int numberOfNodes = list.size();
for (Iterator iter = list.iterator(); iter.hasNext(); ) {
    // do something
}
票数 1
EN

Stack Overflow用户

发布于 2016-11-29 22:28:57

这个正则表达式对我很有效:

代码语言:javascript
复制
document.selectNodes(".//*")
票数 1
EN

Stack Overflow用户

发布于 2014-09-15 19:19:00

元素迭代器只适用于xPath中的下一级。为了能够解析所有的XML并获得所有的元素,你必须使用一些递归。例如,下一步代码将返回带有"name“的所有节点的列表。

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10981198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档