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>

我想检索元素值,我正在使用 XPath 表达式//ResponseItem/Object/Element/Value/text(),其中 ResponseItem 和 Object 是两个上层节点。

这适用于以下代码:

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 表达式更改为

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

这有效...

于 2013-03-14T10:18:19.813 回答
0

在您的 XPath 表达式中,选择元素而不是文本节点。在您的循环中,调用nl.item(i).getTextContent().

于 2013-03-13T09:51:31.937 回答