从节点选择中选择节点
问题描述:
我有一个很大的XML文件,我正在解析。从节点选择中选择节点
我的第一个selectNodes语句给我一个我想要解析的所有元素的列表。
对于第一个selectNodes语句返回的每个元素,我想运行另一个selectNodes。
的XML可能是这样的:
<A>
<B></B>
<C></C>
</A>
<A>
<B></B>
<C></C>
</A>
我克制,因为我必须分析内部节点,即“A”每个子集,一次一个。
最终目标是对每个B,C组合,每次做一件事。
答
您可以提供任何您想要的节点作为XPath表达式的上下文。比方说,你有一个XPath表达式来选择B节点:
XPathExpression expr = xpath.compile("./B");
让我们假设你有变量Node aNode
的一个节点。您可以使用简单的
Object result = expr.evaluate(aNode, XPathConstants.NODE);
选择B元素在哪里的结果将是Node
型。
答
在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读取文件。