从选择的节点中选择节点

时间:2012-08-08 20:32:46

标签: java xml xpath dom4j

我有一个我正在解析的大型XML文件。

我的第一个selectNodes语句为我提供了我想要解析的所有元素的列表。

对于第一个selectNodes语句返回的每个元素,我想运行另一个selectNodes。

XML可能如下所示:

<A>
    <B></B>
    <C></C>
</A>
<A>
    <B></B>
    <C></C>
</A>

我受到限制,因为我必须一次解析内部节点,即“A”的每个子集。

最终目标是对每个B,C组合做一些事情。

2 个答案:

答案 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节点。您可以使用

选择B元素
Object result = expr.evaluate(aNode, XPathConstants.NODE);

结果的类型为Node