【问题标题】:xpath not working in javaxpath在java中不起作用
【发布时间】:2018-06-03 23:55:05
【问题描述】:

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

【问题讨论】:

  • 上下文不应该是Document 节点吗?你确定使用InputSource 作为上下文是正确的吗?
  • 您的 xml 不包含任何文本数据。您需要调用 3 参数版本的 evaluate 并将 XPathConstants.NODESET 或 XPathConstants.NODE 作为最后一个参数传递。
  • @JimGarrison 也可以。我尝试将DocumentInputSource 作为字符串。该字符串实际上是从Document 实例生成的。

标签: java xml xpath


【解决方案1】:

您的 XPath 表达式选择一个元素节点,而不是一个字符串。因此,您需要要求将结果作为 NODESET 返回。

【讨论】:

    【解决方案2】:

    我不熟悉 Java 读取 XML,但您的 XPath 应该是这样的:

    /Structure/Structure/Array/Stucture/OctetString/@value
    

    这将从根节点&lt;Structure&gt; 开始,向下移动到嵌套的&lt;Structure&gt;,再向下移动到&lt;Array&gt;,然后到嵌套的&lt;OctetString&gt; 元素以获取它们的value 属性。

    您的表达式//Structure/Structure/Arrayany &lt;Structure&gt; 开始(由于//)并尝试读取&lt;Array&gt; 的值,但没有值,只是更深的节点。 ..

    【讨论】:

    • 为你点赞。 Michael Kay 的另一个回答正是我打算做的。
    猜你喜欢
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多