【问题标题】:XPath search by "id" attribute , giving NPE - JavaXPath 通过“id”属性搜索,给出 NPE - Java
【发布时间】:2014-04-28 16:22:45
【问题描述】:

全部,

我有多个需要填充数据的 XML 模板,以允许我的文档构建器类使用多个模板并正确插入数据

我通过添加以下属性来指定我希望我的类插入数据的节点:

id="root"

XML 的一个示例

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<SiebelMessage MessageId="07f33fa0-2045-46fd-b88b-5634a3de9a0b" MessageType="Integration Object" IntObjectName="" IntObjectFormat="Siebel Hierarchical" ReturnCode="0" ErrorMessage="">
    <listOfReadAudit >
        <readAudit id="root">
            <recordId mapping="Record ID"></recordId>
            <userId mapping="User ID"></userId>
            <customerId mapping="Customer ID"></customerId>
            <lastUpd mapping="Last Updated"></lastUpd>
            <lastUpdBy mapping="Last Updated By"></lastUpdBy>
            <busComp mapping="Entity Name"></busComp>
        </readAudit>
    </listOfReadAudit>
</SiebelMessage>

代码

expr = xpath.compile("//SiebelMessage[@id='root']");
root = (Element) expr.evaluate(xmlDoc, XPathConstants.NODE);
Element temp = (Element) root.cloneNode(true);

使用这个例子: XPath to select Element by attribute value

表达式不起作用:

//SiebelMessage[@id='root']

任何想法我做错了什么?

【问题讨论】:

    标签: java xml xpath


    【解决方案1】:

    试试这个:

    //readAudit[@id='root']
    

    这将选择所有 readAudit 属性设置为 rootreadAudit 元素(在您的情况下应该只有 1 个元素)。

    您可以确保它返回最多 1 个元素:

    //readAudit[@id='root'][1]
    

    【讨论】:

      【解决方案2】:

      您正在做的是选择属性 id='root' 的 SiebelMessage 节点。

      但是 SiebelMessage 没有 id,它是您所追求的 readAudit。所以要么做

      //readAudit[id='root']
      

      //SiebelMessage//readAudit[id='root']
      

      【讨论】:

        猜你喜欢
        • 2013-05-29
        • 2018-08-08
        • 1970-01-01
        • 1970-01-01
        • 2021-10-12
        • 2021-05-26
        • 2018-11-15
        • 1970-01-01
        • 2019-02-08
        相关资源
        最近更新 更多