XPATH Modified Slides from Dr. Sagiv 1 XPath • A Language for Locating Nodes in XML Documents • XPath expressions are written in a syntax that resembles paths in file systems • The list of nodes located by an XPath expression is called a Nodelist • XPath is used in XSL and in XQuery (a query language for XML) • W3Schools has an XPath tutorial • XPath includes – Axis navigation – Conditions – Functions 2 <?xml version="1.0" encoding="ISO-8859-1"?> <catalog> <cd country="UK"> <title>Dark Side of the Moon</title> <artist>Pink Floyd</artist> <price>10.90</price> An XML document </cd> <cd country="UK"> <title>Space Oddity</title> <artist>David Bowie</artist> <price>9.90</price> </cd> <cd country="USA"> <title>Aretha: Lady Soul</title> <artist>Aretha Franklin</artist> <price>9.90</price> </cd> 3 </catalog> catalog.xml catalog country UK cd country title artist price UK cd cd Pink Floyd 10.90 USA title artist price title artist price Space Oddity Dark Side of the Moon country Aretha: Lady Soul David Bowie 9.90 Aretha Franklin 9.90 4 The Main Idea in the Syntax of XPath Expressoins • “/” at the beginning of an XPath expression represents the root of the document • “/” between element names represents a parent-child relationship • “//” represents an ancestor-descendent relationship • “@” marks an attribute • “[condition]” specifies a condition 5 catalog.xml catalog cd country UK country title artist price UK /catalog cd cd USA title artist price title artist price Space Oddity Dark Side of the Moon Pink Floyd 10.90 country Aretha: Lady Soul David Bowie Aretha Franklin 9.90 Getting the root element of the document 9.90 6 catalog.xml catalog country UK cd country title artist price UK /catalog/cd cd cd USA title artist price title artist price Space Oddity Dark Side of the Moon Pink Floyd 10.90 country Aretha: Lady Soul David Bowie 9.90 Finding child nodes Aretha Franklin 9.90 7 catalog.xml catalog country UK cd country title artist price UK /catalog/cd/price cd cd USA title artist price title artist price Space Oddity Dark Side of the Moon Aretha: Lady Soul David Bowie Pink Floyd 10.90 country Aretha Franklin 9.90 Finding descendent nodes 9.90 8 catalog.xml catalog country UK cd country title artist price UK /catalog/cd[price<10] cd cd USA title artist price title artist price Space Oddity Dark Side of the Moon Aretha: Lady Soul David Bowie Pink Floyd 10.90 country Aretha Franklin 9.90 Condition on elements 9.90 9 catalog.xml country UK cd country title artist price UK catalog //title cd cd Pink Floyd 10.90 country USA title artist price title artist price Space Oddity Dark Side of the Moon /catalog//title Aretha: Lady Soul David Bowie Aretha Franklin 9.90 // represents any directed path in the document 9.90 10 catalog.xml catalog country UK cd country title artist price UK /catalog/cd/* cd cd USA title artist price title artist price Space Oddity Dark Side of the Moon Pink Floyd 10.90 country Aretha: Lady Soul David Bowie Aretha Franklin 9.90 * represents any element name in the document 9.90 11 catalog.xml What will the following expressions return? country UK cd catalog country title artist price UK cd cd USA title artist price title artist price Space Oddity Dark Side of the Moon Pink Floyd 10.90 country Aretha: Lady Soul David Bowie Aretha Franklin 9.90 * represents any element name in the document 9.90 12 catalog.xml /catalog/cd[1] catalog country UK cd country title artist price UK /catalog/cd[last()] cd cd USA title artist price title artist price Space Oddity Dark Side of the Moon Aretha: Lady Soul David Bowie Pink Floyd 10.90 country Aretha Franklin 9.90 Position based condition 9.90 13 catalog.xml /catalog/cd[@country=“UK”] catalog country UK cd country title artist price UK cd cd USA title artist price title artist price Space Oddity Dark Side of the Moon Pink Floyd 10.90 country Aretha: Lady Soul David Bowie 9.90 @ marks attributes Aretha Franklin 9.90 14 catalog.xml catalog /catalog/cd/@country country UK cd country title artist price UK cd cd USA title artist price title artist price Space Oddity Dark Side of the Moon Pink Floyd 10.90 country Aretha: Lady Soul David Bowie 9.90 @ marks attributes Aretha Franklin 9.90 15 Relative Navigation Using Axes • Starts with the current node and not with the root (/) • A . marks the current node (e.g., ./title) • A .. marks the parent node (e.g., title/../*) • There are also other axes, e.g., child, descendent, ancestor, parent, followingsibling, etc. 16 Functions • Many functions that are included in XPath • Some examples: – count() – returns the number of nodes in a nodelist – last() – returns the last node in a nodelist – name() – returns the name of a node – position() – returns the position of the node in the nodelist 17 Additional Examples of XPath Expressions These examples use element names that are not necessarily from the XML document that was shown previously 18 Examples of XPath Expressions • para – Selects the para children elements of the context node • * – Selects all element children of the context node • text() – Selects all text node children of the context node • @name – Selects the name attribute of the context node 19 More Examples of XPath Expressions • @* – Selects all the attributes of the context node • para[1] – Selects the first para child of the context node • para[last()] – Selects the last para child of the context node • */para – Selects all para grandchilren of the context node 20 More Examples of XPath Expressions • /doc/chapter[5]/section[2] – Selects the second section of the fifth chapter of the doc • chapter//para – Selects the para element descendants of the chapter element children of the context node • //para – Selects all the para descendants of the document root and thus selects all para elements in the same document as the context node 21 More Examples of XPath Expressions • //olist/item – Selects all the item elements that have an olist parent and are in the same document as the context node • . – Selects the context node • .//para – Selects the para descendants of the context node • .. – Selects the parent of the context node 22 More Examples of XPath Expressions • ../@lang – Selects the lang attribute of the parent of the context node • para[@type=“warning”] – Selects the para children of the context node that have a type attribute with value warning • chapter[title] – Selects the chapter children of the context node that have one or more title children 23 More Examples of XPath Expressions • para[@type=“warning”][5] – Selects the fifth para child among the children of the context node that have a type attribute with value warning • para[5][@type=“warning”] – Selects the fifth para child of the context node if that child has a type attribute with value warning 24 More Examples of XPath Expressions • chapter[title=“Introduction”] – Selects the chapter children of the context node that have one or more title children with string-value equal to Introduction • employee[@secretary and @assistant] – Selects employee children of the context node that have both a secretary attribute and an assistant attribute 25 More Examples of Xpath Expressions • /university/department/course – This Xpath expression matches any path that starts at the root, which is a university element, passes through a department element and ends in a course element • ./department/course[@year=2002] – This Xpath expression matches any path that starts at the current element, continues to a child which is a department element and ends at a course element with a year attribute that is equal to 2002 26 Location Paths • The previous examples are abbreviations of location paths – See XPath tutorial in W3Schools – For example, // is short for /descendant-or-self::node()/. • //para is short for /descendant-or-self::node()/child::para 27