首页 > 解决方案 > XPath NodeList 值为空

问题描述

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

<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'

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

标签: xpathnodelist

解决方案


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


推荐阅读