2013-03-13 84 views
0

檢索空值有一個XML如下我如何從XML節點

<Element> 
    <Name>srmgmtaddress</Name> 
    <Value>10.133.14.19</Value> 
</Element> 
<Element> 
    <Name>crlbif0</Name> 
    <Value/> 
</Element> 
<Element> 
    <Name>srseid.srtype</Name> 
    <Value>Cisco c7206VXR</Value> 
</Element> 
<Element> 
    <Name>craddressinterim</Name> 
    <Value/> 
</Element> 
<Element> 
    <Name>crvrfinterim</Name> 
    <Value/> 
</Element> 

我要檢索的元素的值和我使用XPath表達式//ResponseItem/Object/Element/Value/text()其中的ResponseItem和對象兩個頂層節點。

這正常工作與下面的代碼:

ArrayList<String> elementsToFetch = new ArrayList<String>(Arrays.asList("//ResponseItem/Object/Element/Name/text()","//ResponseItem/Object/Element/Value/text()")); 

for (String n : elementsToFetch) { 

    XPathFactory xPathfactory1 = XPathFactory.newInstance(); 
    XPath xpath1 = xPathfactory1.newXPath(); 
    XPathExpression expr1 = xpath1.compile(n); 
    NodeList nl = (NodeList) expr1.evaluate(doc1, XPathConstants.NODESET); 
    for (int i=0;i<nl.getLength();i++) { 
    String nodeval = nl.item(i).getNodeValue(); 

    //...SOME CODE HERE 
    } 
} 

但我也想在「crlbif0」檢索空XML節點值,「craddressinterim」等爲NULL或「」。

現在我得到的名單如下,其中空節點是沒有得到處理

[CRNdNode_RO:1024, chn-pe2-rt02, 10.133.14.19, Cisco c7206VXR, CRNdNode_RO:1037, chn-pe4-rt04, 10.133.14.6, Cisco c7609 ...] 

我想要的清單,

[CRNdNode_RO:1024, chn-pe2-rt02, 10.133.14.19, "", Cisco c7206VXR, "", "", CRNdNode_RO:1037, chn-pe4-rt04, 10.133.14.6, "", Cisco c7609, "", "",....] 

在這方面的任何幫助將不勝感激。

+0

你試過像'//的ResponseItem /對象/元/名稱/../值/文本() '?基本上你想要找到'Name'節點並取其父節點並從中取出'Value'子節點。 – OldCurmudgeon 2013-03-13 09:27:59

回答

0

在您的XPath表達式中,選擇元素而不是文本節點。在你的循環中,請致電nl.item(i).getTextContent()

+0

試過一樣,但沒有運氣.. !!! – user1356042 2013-03-13 10:05:21

+0

它適用於我。我使用的XPath表達式是:'Arrays.asList(「// ResponseItem/Object/Element/Name」,「// ResponseItem/Object/Element/Value」)' – VGR 2013-03-13 11:35:26

0

我剛剛得到了解決方案,並認爲分享相同。

我只是改變了XPath表達式

//ResponseItem/Object/Element/Value[string-length(text())>=0] 

這工作...