XPath Selecting and Filtering Nodes
Selecting nodes
XPath treats XML as a tree of nodes and uses path expressions to select them in an XML document. There are seven kinds of nodes: element, attribute, text, namespace, processing-instruction, comment and root node.
In Docentric, report data sources are XML-based (DDSP – Docentric Data Source Package), with data records represented as XML elements and data fields as XML attributes. Thus, selecting nodes via path expressions is used for selecting data records and fields in report data sources. Learn more how Docentric utilizes path expressions >>
Path expression | Description |
---|---|
. | Selects the current node. |
.. | Selects the parent of the current node. |
@ | Selects attributes. |
/ | Selects from the root node. |
// | Selects nodes in the document from the current node that match the selection no matter where they are. |
NodeName | Selects all nodes with the name "NodeName". |
Learn more on selecting XML nodes using XPath >>
Selecting nodes using wildcards
Wildcards can also be used in path expressions to select XML nodes.
Sample XML fragment
1 2 3 4 5 6 7 8 9 10 11 |
<ReportData> <SalesInvoiceLines LineAmount="700.0000000000"> <PackingSlip PackingSlip="" ShowCustPackingSlipTrans="false" /> </SalesInvoiceLines> <SalesInvoiceLines LineAmount="2000.0000000000"> <PackingSlip PackingSlip="" ShowCustPackingSlipTrans="false" /> </SalesInvoiceLines> <SalesInvoiceLines LineAmount="900.0000000000"> <PackingSlip PackingSlip="" ShowCustPackingSlipTrans="false" /> </SalesInvoiceLines> </ReportData> |
Wildcard | Description | Example |
---|---|---|
* | Matches any element node. | count(*) will match any node in the current context without its children and return the number of <SalesInvoiceLines> nodes so it returns 3. |
@* | Matches any attribute node. | count(SalesInvoiceLines/PackingSlip/@*) will match all attributes from all <PackingSlip> nodes so it returns 6. |
node() | Matches any node of any type. | count(node()) will select all child nodes of any type without descendants in the current context and return 3 which is a number of <SalesInvoiceLines> nodes. |
Filtering nodes using predicates
Predicates are used to find a specific node or a node that contains a specific value and are always embedded in square brackets, e.g. SalesInvoiceLines[@LineAmount>1000]. Docentric usually uses predicates for filtering nodes, e.g. selecting data records with the data fields which fulfill a specific condition.
Sample XML fragment
1 2 3 4 5 |
<ReportData> <SalesInvoiceLines LineAmount="700.0000000000" /> <SalesInvoiceLines LineAmount="2000.0000000000" /> <SalesInvoiceLines LineAmount="900.0000000000" /> </ReportData> |
Path expression | Result |
---|---|
SalesInvoiceLines[1]/@LineAmount |
Returns 700.0000000000. NOTE: To display the result that is a number in a particular format (e.g. 700.00), it should be formatted by applying Format String (e.g. "n2"). |
SalesInvoiceLines[last()]/@LineAmount |
Returns 900.0000000000. NOTE: To display the result that is a number in a particular format (e.g. 900), it should be formatted by applying Format String (e.g. "n0"). |
SalesInvoiceLines[@LineAmount > 1000] | Returns <SalesInvoiceLines LineAmount="2000.0000000000"></SalesInvoiceLines> node. |
See also
XPath Expressions Overview >>
XPath Functions >>
XPath Operators >>
XPath Tutorial on W3Schools >>