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?
A Parent of a context node is selected Flat element. A string of elements is normally separated by a slash in an XPath statement. You can pick the parent element by inserting two periods “..” where an element would typically be. The parent of the element to the left of the double period will be selected.
It defines a language to find information in an XML file. It is used to traverse elements and attributes of an XML document.
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]
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']
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With