Xpath: It is syntax, used to navigate the elements and their attributes. Its make easy to get the any element or attribute.
XPath Terminology
1. element
2. attribute
3. text
4. namespace
5. processing-instruction
6. comment
7. document nodes
Following are few Xpath Expression and their Description
Xpath Expression | Description |
---|---|
./writer | All <writer> elements within the current context. Note that this is equivalent to the expression in the next row. |
writer | All <writer> elements within the current context. |
first.name | All <first.name> elements within the current context. |
/bookStore | The document element (<bookStore>) of this document. |
//writer | All <writer> elements in the document. |
book[/bookStore/@specialty=@style] | All <book> elements whose style attribute value is equal to the specialty attribute value of the <bookStore> element at the root of the document. |
writer/first-name | All <first-name> elements that are children of an <writer> element. |
bookStore//title | All <title> elements one or more levels deep in the <bookStore> element (arbitrary descendants). Note that this is different from the expression in the next row. |
bookStore/*/title | All <title> elements that are grandchildren of <bookStore> elements. |
bookStore//book/excerpt//emph | All <emph> elements anywhere inside <excerpt> children of <book> elements, anywhere inside the <bookStore> element. |
.//title | All <title> elements one or more levels deep in the current context. Note that this situation is essentially the only one in which the period notation is required. |
writer/* | All elements that are the children of <writer> elements. |
book/*/lastName | All <lastName> elements that are grandchildren of <book> elements. |
*/* | All grandchildren elements of the current context. |
*[@specialty] | All elements with the specialty attribute. |
@style | The style attribute of the current context. |
price/@exchange | The exchange attribute on <price> elements within the current context. |
price/@exchange/total | Returns an empty node set, because attributes do not contain element children. This expression is allowed by the XML Path Language (XPath) grammar, but is not strictly valid. |
book[@style] | All <book> elements with style attributes, of the current context. |
book/@style | The style attribute for all <book> elements of the current context. |
@* | All attributes of the current element context. |
./first-name | All <first-name> elements in the current context node. Note that this is equivalent to the expression in the next row. |
first-name | All <first-name> elements in the current context node. |
writer[1] | The first <writer> element in the current context node. |
writer[first-name][3] | The third <writer> element that has a <first-name> child. |
my:book | The <book> element from the my namespace. |
my:* | All elements from the my namespace. |
@my:* | All attributes from the my namespace (this does not include unqualified attributes on elements from the my namespace). |
Xpath Expression | Description |
---|---|
x/y[1] | The first <y> child of each <x>. This is equivalent to the expression in the next row. |
x/y[position() = 1] | The first <y> child of each <x>. |
(x/y)[1] | The first <y> from the entire set of <y> children of <x> elements. |
x[1]/y[2] | The second <y> child of the first <x>. |
Xpath Expression | Description |
---|---|
book[last()] | The last <book> element of the current context node. |
book/writer[last()] | The last <writer> child of each <book> element of the current context node. |
(book/writer)[last()] | The last <writer> element from the entire set of <writer> children of <book> elements of the current context node. |
book[excerpt] | All <book> elements that contain at least one <excerpt> element child. |
book[excerpt]/title | All <title> elements that are children of <book> elements that also contain at least one <excerpt> element child. |
book[excerpt]/writer[degree] | All <writer> elements that contain at least one <degree> element child, and that are children of <book> elements that also contain at least one <excerpt> element. |
book[writer/degree] | All <book> elements that contain <writer> children that in turn contain at least one <degree> child. |
writer[degree][award] | All <writer> elements that contain at least one <degree> element child and at least one <award> element child. |
writer[degree and award] | All <writer> elements that contain at least one <degree> element child and at least one <award> element child. |
writer[(degree or award) and publication] | All <writer> elements that contain at least one <degree> or <award> and at least one <publication> as the children |
writer[degree and not(publication)] | All <writer> elements that contain at least one <degree> element child and that contain no <publication> element children. |
writer[not(degree or award) and publication] | All <writer> elements that contain at least one <publication> element child and contain neither <degree> nor <award> element children. |
writer[lastName = "Bob"] | All <writer> elements that contain at least one <lastName> element child with the value Bob. |
writer[lastName[1] = "Bob"] | All <writer> elements where the first <lastName> child element has the value Bob. Note that this is equivalent to the expression in the next row. |
writer[lastName [position()=1]= "Bob"] | All <writer> elements where the first <lastName> child element has the value Bob. |
degree[@from != "Harvard"] | All <degree> elements where the from attribute is not equal to "Harvard". |
writer[. = "Matthew Bob"] | All <writer> elements whose value is Matthew Bob. |
writer[lastName = "Bob" and ../price > 50] | All <writer> elements that contain a <lastName> child element whose value is Bob, and a <price> sibling element whose value is greater than 50. |
book[position() <= 3] | The first three books (1, 2, 3). |
writer[not(lastName = "Bob")] | All <writer> elements that do no contain <lastName> child elements with the value Bob. |
writer[first-name = "Bob"] | All <writer> elements that have at least one <first-name> child with the value Bob. |
writer[* = "Bob"] | all writer elements containing any child element whose value is Bob. |
writer[lastName = "Bob" and first-name = "Joe"] | All <writer> elements that has a <lastName> child element with the value Bob and a <first-name> child element with the value Joe. |
price[@intl = "Canada"] | All <price> elements in the context node which have an intl attribute equal to "Canada". |
degree[position() < 3] | The first two <degree> elements that are children of the context node. |
p/text()[2] | The second text node in each <p> element in the context node. |
ancestor::book[1] | The nearest <book> ancestor of the context node. |
ancestor::book[writer][1] | The nearest <book> ancestor of the context node and this <book> element has an <writer> element as its child. |
ancestor::writer[parent::book][1] | The nearest <writer> ancestor in the current context and this <writer> element is a child of a <book> element. |