XPath search by "id" attribute , giving NPE - Java
Solution 1
Try this:
//readAudit[@id='root']
This selects all readAudit
elements with the id
attribute set to root
(it should be just 1 element in your case).
You could make sure it returns maximum 1 element with this:
//readAudit[@id='root'][1]
Solution 2
What you are doing is selecting SiebelMessage nodes with the attribute id='root'.
But the SiebelMessage doesn't have an id, it's the readAudit you are after. So either do
//readAudit[id='root']
or
//SiebelMessage//readAudit[id='root']
![tomaytotomato](https://i.stack.imgur.com/JC3EX.jpg?s=256&g=1)
tomaytotomato
Updated on July 10, 2022Comments
-
tomaytotomato almost 2 years
All,
I have multiple XML templates that I need to fill with data, to allow my document builder class to use multiple templates and insert data correctly
I designate the node that I want my class to insert data to by adding an attribute of:
id="root"
One example of an 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>
Code
expr = xpath.compile("//SiebelMessage[@id='root']"); root = (Element) expr.evaluate(xmlDoc, XPathConstants.NODE); Element temp = (Element) root.cloneNode(true);
Using this example: XPath to select Element by attribute value
The expression is not working:
//SiebelMessage[@id='root']
Any ideas what I am doing wrong?