2012-08-08 253 views
0

我有一个很大的XML文件,我正在解析。从节点选择中选择节点

我的第一个selectNodes语句给我一个我想要解析的所有元素的列表。

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

的XML可能是这样的:

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

我克制,因为我必须分析内部节点,即“A”每个子集,一次一个。

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

回答

0

您可以提供任何您想要的节点作为XPath表达式的上下文。比方说,你有一个XPath表达式来选择B节点:

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

让我们假设你有变量Node aNode的一个节点。您可以使用简单的

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

选择B元素在哪里的结果将是Node型。

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读取文件。