我想获取xml中的元素数量,这些元素具有特定的名称,例如。名称= “同时”)
问题是,如果我使用以下代码 - 我只获得具有此名称的顶级元素 -
for ( Iterator i = root.elementIterator( "while" ); i.hasNext(); ) {
Element foo = (Element) i.next();
但是任何较低级别的“while”元素都不是迭代器的一部分......
获取name =“while”的所有元素(无论是顶级还是低级)的最有效方法是什么?为此,我是否必须解析文档中的所有元素?
答案 0 :(得分:1)
您可以使用//while
或name()
函数以及通配符节点*
来使用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;
}