我有以下xml字符串
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Structure>
<LongUnsigned value="142794"/>
<OctetString value="07E2051E030F1E0404800000"/>
<Structure>
<OctetString value="07E2051E030F1E0404800000"/>
<OctetString value="66574536387"/>
<Array>
<Structure><OctetString value="0000000000000001"/><OctetString value="9889892347"/></Structure>
<Structure><OctetString value="00098347586768574"/><OctetString value="6283046502"/></Structure>
<Structure><OctetString value="0000011000000001"/><OctetString value="899734729847586"/></Structure>
</Array>
</Structure>
</Structure>
我正在使用下面的xpath,但它总是返回一个空字符串。
XPath xPath = XPathFactory.newInstance().newXPath();
try {
String eval = xPath.evaluate("//Structure/Structure/Array", new InputSource(new StringReader(xmlString)));
System.out.println("Eval:" + eval);
} catch (XPathExpressionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
我尝试在线运行这个xpath,它似乎工作得很好。我在Java中缺少什么使它无法按预期工作。
答案 0 :(得分:2)
您的XPath表达式选择元素节点,而不是字符串。所以你需要要求将结果作为NODESET返回。
答案 1 :(得分:1)
我不熟悉Java阅读XML,但您的XPath
应该是这样的:
/Structure/Structure/Array/Stucture/OctetString/@value
这将从根节点<Structure>
开始,向下移动到嵌套<Structure>
,再向下移动到<Array>
,然后移到嵌套的<OctetString>
元素以获取它们value
属性。
您的表达式//Structure/Structure/Array
从任何 <Structure>
开始(由于//
)并尝试读取<Array>
的值,但是没有价值,只是更深的节点...