XPath按"id"属性搜索,给出NPE - Java

tom*_*ato 21 java xml xpath

所有,

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

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

ID = "根"

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>
Run Code Online (Sandbox Code Playgroud)

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

使用此示例: XPath选择Element by属性值

表达式不起作用:

// SiebelMessage [@ ID = '根']

我有什么想法我做错了吗?

Ste*_*ies 32

试试这个:

//readAudit[@id='root']
Run Code Online (Sandbox Code Playgroud)

这将选择属性设置为的所有readAudit元素(在您的情况下,它应该只是1个元素).idroot

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

//readAudit[@id='root'][1]
Run Code Online (Sandbox Code Playgroud)