如何从XML节点检索空白值

时间:2013-03-13 09:16:57

标签: java 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和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, "", "",....]

在这方面的任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我刚刚得到了解决方案,并考虑分享相同的内容。

我刚刚将XPath表达式更改为

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

这有效......