Java 从选定的节点中选择节点

Java 从选定的节点中选择节点,java,xml,xpath,dom4j,Java,Xml,Xpath,Dom4j,我正在解析一个很大的XML文件 我的第一个selectNodes语句为我提供了一个要解析的所有元素的列表 对于第一个selectNodes语句返回的每个元素,我想运行另一个selectNodes XML可能如下所示: <A> <B></B> <C></C> </A> <A> <B></B> <C></C> </A>

我正在解析一个很大的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");
假设在变量
节点阳极中有一个节点。您可以简单地使用

Object result = expr.evaluate(aNode, XPathConstants.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(“//B”);
List cNodes=document.selectNodes(“//C”);
用于(对象b:b节点)
用于(对象c:cNodes)
//对每个b/c组合做些什么
或者,要指定要搜索的根节点,请使用:

List<?> bNodes = document.selectNodes("A//B");
List<?> cNodes = document.selectNodes("A//C");
List bNodes=document.selectNodes(“A//B”);
List cNodes=document.selectNodes(“A//C”);
其中文档是使用SAXReader读取的文件