我想要获取xml中具有特定名称的元素的数量,例如。name="while")
问题是,如果我使用以下代码-我只获得具有此名称的顶级元素--
for ( Iterator i = root.elementIterator( "while" ); i.hasNext(); ) {
Element foo = (Element) i.next();但是任何较低级别的"while“元素都不是迭代器的一部分...
获取具有name="while“的所有元素(无论是顶级元素还是低级元素)的最有效方法是什么?为此,我必须解析文档中的所有元素吗?
发布于 2012-06-11 21:44:19
为此,可以使用XPath,也可以使用//while或name()函数和一个通配符节点*://*[name() = 'while']
List list = document.selectNodes("//*[name() = 'while']"); // or "//while"
int numberOfNodes = list.size();
for (Iterator iter = list.iterator(); iter.hasNext(); ) {
// do something
}发布于 2016-11-29 22:28:57
这个正则表达式对我很有效:
document.selectNodes(".//*")发布于 2014-09-15 19:19:00
元素迭代器只适用于xPath中的下一级。为了能够解析所有的XML并获得所有的元素,你必须使用一些递归。例如,下一步代码将返回带有"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;
}https://stackoverflow.com/questions/10981198
复制相似问题