0

私は以下のような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>

Element Values を取得したいのですが//ResponseItem/Object/Element/Value/text()、ResponseItem と Object が 2 つの上位ノードである XPath 式を使用しています。

これは、以下のコードで問題なく動作します。

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」、「craddressinterim」などの空白の XML ノード値を 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, "", "",....]

この点で何か助けていただければ幸いです。

4

2 に答える 2

0

XPath 式で、テキスト ノードではなく要素を選択します。ループで、 を呼び出しますnl.item(i).getTextContent()

于 2013-03-13T09:51:31.937 に答える
0

私はこれに対する解決策を得たばかりで、同じことを共有すると考えました。

XPath式を次のように変更しました

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

これは機能します...

于 2013-03-14T10:18:19.813 に答える