我有一个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, "", "",....]
在这方面的任何帮助将不胜感激。
答案 0 :(得分:0)
在XPath表达式中,选择元素而不是文本节点。在循环中,请致电nl.item(i).getTextContent()
。
答案 1 :(得分:0)
我刚刚得到了解决方案,并考虑分享相同的内容。
我刚刚将XPath表达式更改为
//ResponseItem/Object/Element/Value[string-length(text())>=0]
这有效......