xpath无法在java中工作

时间:2018-06-03 23:55:06

标签: java xml xpath

我有以下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中缺少什么使它无法按预期工作。

2 个答案:

答案 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>的值,但是没有价值,只是更深的节点...