【问题标题】:XPath NodeList Values are EmptyXPath NodeList 值为空
【发布时间】:2020-06-15 19:26:25
【问题描述】:

我正在尝试使用以下数据来解析和处理日期值。

<Data>
<Data1 Study="R1979" MetaDataVersionOID="6713">
<Data2 Subject="4100">
    <SData Event="SCN" key="WK1[1]">
        <FormData Form="PEMD" FormKey="1">
            <ItemData Item="PM" Value="1"/>
            <ItemData Item="PE" Value="1"/>
            <ItemData Item="DATE" Value="2020-01-01"/>
        </FormData>
    </SData>
</Data2>
</Data1>
<Data1 Study="R1979" MetaDataVersionOID="6713">
<Data2 Subject="4100">
    <SData Event="WK1" key="WK1[1]">
        <FormData Form="PEMD" Formkey="1">
            <ItemData Item="PM" Value="1"/>
            <ItemData Item="PE" Value="1"/>
            <ItemData Item="DATE" Value="2019-12-18"/>
        </FormData>
    </SData>
</Data2>
</Data1>
</Data>

使用此代码节点值为null 登陆日期为空:

strXPath =/Data/Data1/Data2[@Subject='4100']/SData/FormData[@Form='PEMD']/ItemData[@Item='DATE']
NodeList nodes = (NodeList) XPathUtil.getXPath().evaluate(strXPath, docODM, XPathConstants.NODESET);
for (int i = 0; i < nodes.getLength(); i++) {
    logger.info("node " + i);

    Node nodeElement = nodes.item(i);

    logger.info("node value: " + nodeElement.getNodeValue());

    String date = (String)XPathUtil.getXPath().evaluate("/ItemData/@Value", nodeElement, XPathConstants.STRING);

    logger.info("date: " + date);
}

第一个 strXPath 产生这个:

Element='<ItemData Item="DATE" Value="2020-01-01"/>'
Element='<ItemData Item="DATE" Value="2019-12-18"/>'

使用此方法一次检索一个元素的日期值应该可以:

/ItemData/@Value

在测试器中也是如此。

Attribute='Value=2020-01-01'

但上面的节点值为空,日期为空,不知道为什么。

【问题讨论】:

    标签: xpath nodelist


    【解决方案1】:

    您应该修复您的第二个 XPath。在其开头添加 . 以指定您正在从上下文节点工作并删除 ItemData 部分。

    String date = (String)XPathUtil.getXPath().evaluate("./@Value", nodeElement, XPathConstants.STRING);
    

    输出:

    ['2020-01-01']
    ['2019-12-18']
    

    【讨论】:

    • 谢谢,但正如我所说,我已经从 /@Value 路径中获得了正确的值。问题出在我们的环境编译 XPathFactory 和其他类的方式上。我使用了 org.w3c.dom 中的 Node.getAttributes(),它起作用了。
    • 所以它适用于/ItemData/@Value,好的......在Python中,./@Value应该是要走的路。我想它与 Java 和 XPath 工厂有关。很高兴你找到了有用的东西。
    【解决方案2】:

    我使用了来自 org.w3c.dom 的 Node.getAttributes() 并且它有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 2021-02-07
      • 2020-07-17
      • 1970-01-01
      • 2014-08-19
      相关资源
      最近更新 更多