Here, in this article I would brief about querying XML Document Node values using X-path
XPath is used to navigate through elements and attributes in an XML document. It is a major element in W3C's XSLT standard. XPath uses path expressions to navigate in XML documents
It contains a library of standard functions and is a major element in XSLT; without XPath knowledge you will not be able to create XSLT documents.
XPath Terminology
Nodes
In xpath, there are seven kinds of nodes: element, attribute, text, namespace, processing-instruction, comment, and document nodes.
XML documents are treated as trees of nodes. The topmost element of the tree is called the root element.
x-path queries
Lets see about relationship between nodes and read element value using xpath with the below xml document,
<OrderCollection>
<AddressBookEntryIdentifier>1212121212</AddressBookEntryIdentifier>
<ConsumerOrderNumber>100-200</ConsumerOrderNumber>
<Orders>
<Order>
<MetadataCollection>
<Metadata>
<Name>LoanNumber</Name>
<Value>100</Value>
</Metadata>
<Metadata>
<Name>TID</Name>
<Value>10</Value>
</Metadata>
<Metadata>
<Name>ID</Name>
<Value>11</Value>
</Metadata>
<Metadata>
<Name>ProviderID</Name>
<Value>1000</Value>
</Metadata>
</MetadataCollection>
<OrderNumber>10000</OrderNumber>
<ReferenceNumbers>
<OrderReference>
<ReferenceNumber>10101010</ReferenceNumber>
<ReferenceType>FileId</ReferenceType>
</OrderReference>
</ReferenceNumbers>
</Order>
<Order>
<MetadataCollection>
<Metadata>
<Name>LoanNumber</Name>
<Value>200</Value>
</Metadata>
<Metadata>
<Name>TID</Name>
<Value>20</Value>
</Metadata>
<Metadata>
<Name>EID</Name>
<Value>21</Value>
</Metadata>
<Metadata>
<Name>ProviderID</Name>
<Value>2000</Value>
</Metadata>
</MetadataCollection>
<OrderNumber>20000</OrderNumber>
<ReferenceNumbers>
<OrderReference>
<ReferenceNumber>202020</ReferenceNumber>
<ReferenceType>FileId</ReferenceType>
</OrderReference>
</ReferenceNumbers>
</Order>
</Orders>
</OrderCollection>
Relationship of Nodes
Parent
Select all the occurrence of an element irrespective of its parent,
This article would help you understand writing xpath queries on xml and as BizTalk Server is a message-based system and all the messages that enter the BizTalk are converted to XML format, it would help you read elements inside maps/orchestration and pipeline components using xpaths
XPath is used to navigate through elements and attributes in an XML document. It is a major element in W3C's XSLT standard. XPath uses path expressions to navigate in XML documents
It contains a library of standard functions and is a major element in XSLT; without XPath knowledge you will not be able to create XSLT documents.
XPath Terminology
Nodes
In xpath, there are seven kinds of nodes: element, attribute, text, namespace, processing-instruction, comment, and document nodes.
XML documents are treated as trees of nodes. The topmost element of the tree is called the root element.
x-path queries
Lets see about relationship between nodes and read element value using xpath with the below xml document,
<OrderCollection>
<AddressBookEntryIdentifier>1212121212</AddressBookEntryIdentifier>
<ConsumerOrderNumber>100-200</ConsumerOrderNumber>
<Orders>
<Order>
<MetadataCollection>
<Metadata>
<Name>LoanNumber</Name>
<Value>100</Value>
</Metadata>
<Metadata>
<Name>TID</Name>
<Value>10</Value>
</Metadata>
<Metadata>
<Name>ID</Name>
<Value>11</Value>
</Metadata>
<Metadata>
<Name>ProviderID</Name>
<Value>1000</Value>
</Metadata>
</MetadataCollection>
<OrderNumber>10000</OrderNumber>
<ReferenceNumbers>
<OrderReference>
<ReferenceNumber>10101010</ReferenceNumber>
<ReferenceType>FileId</ReferenceType>
</OrderReference>
</ReferenceNumbers>
</Order>
<Order>
<MetadataCollection>
<Metadata>
<Name>LoanNumber</Name>
<Value>200</Value>
</Metadata>
<Metadata>
<Name>TID</Name>
<Value>20</Value>
</Metadata>
<Metadata>
<Name>EID</Name>
<Value>21</Value>
</Metadata>
<Metadata>
<Name>ProviderID</Name>
<Value>2000</Value>
</Metadata>
</MetadataCollection>
<OrderNumber>20000</OrderNumber>
<ReferenceNumbers>
<OrderReference>
<ReferenceNumber>202020</ReferenceNumber>
<ReferenceType>FileId</ReferenceType>
</OrderReference>
</ReferenceNumbers>
</Order>
</Orders>
</OrderCollection>
Relationship of Nodes
Parent
- Each element and attribute has one parent.
- In the sample shown; the Order element is the parent of the MetadataCollection, OrderNumber and ReferenceNumbers
- Element nodes may have zero, one or more children.
- In the example; the ReferenceNumber and ReferenceType elements are all children of the OrderReference element
- Nodes that have the same parent.
- In the sample shown example; the Name and Value elements are all siblings
- A node's parent, parent's parent, etc.
- In the sample shown; the ancestors of the Order element are the Orders and OrderCollection elements
Select all the occurrence of an element irrespective of its parent,
- /*[local-name()='OrderCollection' and namespace-uri()='']/*[local-name()='Orders' and namespace-uri()='']/*[local-name()='Order' and namespace-uri()='']/*[local-name()='MetadataCollection' and namespace-uri()='']/*[local-name()='Metadata' and namespace-uri()='']
- /*[local-name()='OrderCollection' and namespace-uri()='']/*[local-name()='Orders' and namespace-uri()='']/*[local-name()='Order' and namespace-uri()='']/*[local-name()='MetadataCollection' and namespace-uri()='']/*[local-name()='Metadata' and namespace-uri()='' and *[local-name()='Name' and namespace-uri()='' and .='ProviderID']]/*[local-name()='Value' and namespace-uri()='']
- /*[local-name()='OrderCollection' and namespace-uri()='']/*[local-name()='Orders' and namespace-uri()='']/*[local-name()='Order' and namespace-uri()='']/*[local-name()='ReferenceNumbers' and namespace-uri()='']/*[local-name()='OrderReference' and namespace-uri()='' and *[local-name()='ReferenceType' and namespace-uri()='' and .='FileId']]/*[local-name()='ReferenceNumber' and namespace-uri()='']
- /*[local-name()='OrderCollection' and namespace-uri()='']/*[local-name()='Orders' and namespace-uri()='']/*[local-name()='Order' and namespace-uri()='' and *[local-name()='OrderNumber' and namespace-uri()='' and .='10000']]/*[local-name()='MetadataCollection' and namespace-uri()='']/*[local-name()='Metadata' and namespace-uri()='' and *[local-name()='Name' and namespace-uri()='' and .='ProviderID']]/*[local-name()='Value' and namespace-uri()='']
- //*[local-name()='Metadata' and namespace-uri()='' and *[local-name()='Name' and namespace-uri()=''and .='ProviderID']]
- //*[local-name()='Metadata' and namespace-uri()='' and *[local-name()='Name' and namespace-uri()='' and .='ProviderID']]/*[local-name()='Value' and namespace-uri()='']
- /*[local-name()='OrderCollection' and namespace-uri()='']/*[local-name()='Orders' and namespace-uri()='']/*[local-name()='Order' and namespace-uri()='']/*[local-name()='MetadataCollection' and namespace-uri()='']/*[local-name()='Metadata' and namespace-uri()='' and *[local-name()='Name' and namespace-uri()='' and translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') ='id']]
- /*[local-name()='OrderCollection' and namespace-uri()='']/*[local-name()='Orders' and namespace-uri()='']/*[local-name()='Order' and namespace-uri()='' and *[local-name()='OrderNumber' and namespace-uri()='' and .='10000']]
- /*[local-name()='OrderCollection' and namespace-uri()='']/*[local-name()='Orders' and namespace-uri()='']/*[local-name()='Order' and namespace-uri()='' and *[local-name()='ReferenceNumbers' and namespace-uri()='' and *[local-name()='OrderReference' and namespace-uri()='' and *[local-name()='ReferenceNumber' and namespace-uri()='' and .='10101010']]]]
This article would help you understand writing xpath queries on xml and as BizTalk Server is a message-based system and all the messages that enter the BizTalk are converted to XML format, it would help you read elements inside maps/orchestration and pipeline components using xpaths
No comments:
Post a Comment
Note: only a member of this blog may post a comment.