XPath通过“搜索”;id";属性,给出NPE-Java

XPath通过“搜索”;id";属性,给出NPE-Java,java,xml,xpath,Java,Xml,Xpath,全部, 我需要用数据填充多个XML模板,以允许我的document builder类使用多个模板并正确插入数据 我通过添加以下属性来指定希望类向其插入数据的节点: id=“根” XML的一个示例 <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <SiebelMessage MessageId="07f33fa0-2045-46fd-b88b-5634a3de9a0b" MessageType="Integrati

全部,

我需要用数据填充多个XML模板,以允许我的document builder类使用多个模板并正确插入数据

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

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>
使用此示例:

表达式不起作用:

//SiebelMessage[@id='root']

你知道我做错了什么吗?

试试这个:

//readAudit[@id='root']
这将选择所有
readAudit
元素,其
id
属性设置为
root
(在您的情况下,它应该只有一个元素)

您可以确保它返回最多1个元素,如下所示:

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

您要做的是选择属性id='root'的SiebelMessage节点

但是SiebelMessage没有id,它是您要查找的readAudit。你也可以

//readAudit[id='root']

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