我有一个我正在解析的大型XML文件。
我的第一个selectNodes语句为我提供了我想要解析的所有元素的列表。
对于第一个selectNodes语句返回的每个元素,我想运行另一个selectNodes。
XML可能如下所示:
<A>
<B></B>
<C></C>
</A>
<A>
<B></B>
<C></C>
</A>
我受到限制,因为我必须一次解析内部节点,即“A”的每个子集。
最终目标是对每个B,C组合做一些事情。
答案 0 :(得分:1)
在xPath中,您可以使用双斜杠(//)查找父节点中某个名称的所有节点。如果要返回文档中的所有节点,表达式可以以“//”。
开头要返回单独列表中的所有B节点和所有C节点,请尝试:
List<?> bNodes = document.selectNodes("//B");
List<?> cNodes = document.selectNodes("//C");
for (Object b : bNodes)
for (Object c : cNodes)
//do something with each b/c combination
或者,要指定要搜索的根节点,请使用:
List<?> bNodes = document.selectNodes("A//B");
List<?> cNodes = document.selectNodes("A//C");
使用SAXReader读取文件的文件。
答案 1 :(得分:0)
您可以提供所需的任何节点作为XPath表达式的上下文。假设您有一个XPath表达式来选择B节点:
XPathExpression expr = xpath.compile("./B");
假设您在变量Node aNode
中有A节点。您可以使用
Object result = expr.evaluate(aNode, XPathConstants.NODE);
结果的类型为Node
。