Saturday, July 5, 2008

xpath

XML example document
<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>

Expression Description Example
nodename Selects all child nodes of the named node bookstore
-- Selects all the child nodes of the bookstore element
/ Selects from the root node /bookstore
-- Selects the root element bookstore.Note: If the path starts with a slash ( / ) it always represents an absolute path to an element!

bookstore/book
-- Selects all book elements that are children of bookstore
// Selects nodes in the document from the current node that match the selection no matter where they are //book
-- Selects all book elements no matter where they are in the document

bookstore//book
-- Selects all book elements that are descendant of the bookstore element, no matter where they are under the bookstore element
. Selects the current node  
.. Selects the parent of the current node  
@ Selects attributes //@lang
-- Selects all attributes that are named lang.

Predicates
Predicates are used to find a specific node or a node that contains a specific value. Predicates are always embedded in square brackets.
Path Expression Result
/bookstore/book[1] Selects the first book element that is the child of the bookstore element.

Note: IE5 and later has implemented that [0] should be the first node, but according to the W3C standard it should have been [1]!!

/bookstore/book[last()] Selects the last book element that is the child of the bookstore element
/bookstore/book[last()-1] Selects the last but one book element that is the child of the bookstore element
/bookstore/book[position()<3] Selects the first two book elements that are children of the bookstore element
//title[@lang] Selects all the title elements that have an attribute named lang
//title[@lang='eng'] Selects all the title elements that have an attribute named lang with a value of 'eng'
/bookstore/book[price>35.00] Selects all the book elements of the bookstore element that have a price element with a value greater than 35.00
/bookstore/book[price>35.00]/title Selects all the title elements of the book elements of the bookstore element that have a price element with a value greater than 35.00

Wildcard Description  
* Matches any element node /bookstore/* --Selects all the child nodes of the bookstore element
//* --Selects all elements in the document
@* Matches any attribute node //title[@*] --Selects all title elements which have any attribute
node() Matches any node of any kind  

| for several Paths
//book/title | //book/price
--Selects all the title AND price elements of all book elements.


XPath Operators
Operators can be used in XPath expressions. It supports +,-,*,div, =,!=,...,mod. The special one is "div", because "/" is used for paths.

/bookstore/book[1]/price returns the price node of book1
/bookstore/book[1]/price/text() returns the text of the price of book1, which is 29.99

No comments:

Post a Comment