2012-08-08 319 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讀取文件。