0

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

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

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

XML 可能如下所示:

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

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

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

4

2 回答 2

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");

document 是您使用 SAXReader 读取的文件在哪里。

于 2015-08-21T13:14:46.803 回答
0

您可以提供所需的任何节点作为 XPath 表达式的上下文。假设您有一个 XPath 表达式来选择 B 节点:

XPathExpression expr = xpath.compile("./B");

假设您在变量中有 A 节点Node aNode。您可以使用简单的选择 B 元素

Object result = expr.evaluate(aNode, XPathConstants.NODE);

结果将是类型Node

于 2012-08-08T20:43:45.060 回答