1 / 23

Introduction to XPath

Understand the core concepts of XPath in XML document navigation. Learn about XPath expressions, processing, predicates, functions, and context nodes. Explore examples and different axes in XPath for effective web engineering.

rmassey
Download Presentation

Introduction to XPath

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Introduction to XPath Web Engineering, SS 2007 Tomáš Pitner

  2. XPath – Why? • Part of the core XML standards family • XML Path Language (XPath) Version 1.0 • W3C Recommendation 16 November 1999 • Mean to navigate in the document tree

  3. Example of an XML Document <?xml version='1.0' encoding='UTF-8'?> <staff organization="Bundesregierung"> <person id="agu"> <name>Alfred Gusenbauer</name> <party url="http://www.spoe.at">SPÖ</party> </person> <person id="wmo"> <name>Wilhelm Molterer</name> <party url="http://www.oevp.at">ÖVP</party> </person> </staff>

  4. XPath– The Goal • Navigation in XML documents • Similar to file addressing in a FS • Selects nodes (not just elements) in the tree • Further node processing often takes place: • XSLT, XQuery – both heavily depend on XPath • Works on Logical Structure (XML tree) • Example: an XPath expression against the last document • /staff/person[@id=‘wmo’]

  5. XPath Processing • XPath Processor/Engine • Takes XPath expression • Takes context node (position in the doc) • Accesses the source XML tree • Produces node-set/sequence as result XPath Expression /staff/person[@id=‘wmo’] • <person id="wmo"> • <name>Wilhelm Molterer</name> • <party • url="http://www.oevp.at“ • >ÖVP</party> • </person> XML doc XML doc XPath Processor/engine

  6. XPath – Anatomy of an Expression • XPath Expression • Consists of steps separated by slash / • example – two steps • /staff/person • semantics: Select all person elements under staff (which is the root element). • resembles traversing directories in a FS • applicable to both elements and othernodes! • may be absolute (starting with /) or relative • i.e. evaluated without or against context nodes

  7. XPath – Predicates • XPath Expression with Predicates • each step may contain a predicate • It filters the nodes selected at the step • /staff/person[@id=‘wmo’] • Select just the person under staff with id attribute = ‘wmo’ • Predicates may be compound • //person[@id=‘wmo’ or @id=‘agu’]

  8. XPath – Functions • To select non-element nodes • comment() • text() • processing-instruction() … • To compute a value • count() • … much more • Example – select just the text of the name of the ‘agu’ person: • /staff/person[@id=‘agu’]/name/text()

  9. XPath Processing – Context, Axes • Context nodes and Axes • Context nodes • “central point” for evaluating relative expressions • Axes • “directions” leading from the context node out • node-sets relative to the context node(s) • Steps in the expression mean traversing along axes

  10. XPath Expression Examples • All against the doc on the first slide… absolute expressions • //name… selects all name elements • //person[party] … selects all person elements having (any) party child element • /staff/person[party[@url=‘xxx’]] • selects all person elements having party with url xxx • /person … does not select anything from this doc

  11. XPath Expression Examples • All against the doc on the first slide… relative expressions • Context node: first person • name… selects this person’s name element • ../staff … selects the staff element • ../* … selects also the staff element • / … also the staff • .//* … selects all descendant elements • staff/name … does not select anything from this doc

  12. XPath Axes Example (ancestor) ancestor ancestor-or-self <?xml version='1.0' encoding='UTF-8'?> <staff organization="Bundesregierung"> <person id="agu"> <name>Alfred Gusenbauer</name> <party url="http://www.spoe.at">SPÖ</party> </person> <person id="wmo"> <name>Wilhelm Molterer</name> <party url="http://www.oevp.at">ÖVP</party> </person> </staff> parent context node

  13. XPath Axes Example (descendant) context node <?xml version='1.0' encoding='UTF-8'?> <staff organization="Bundesregierung"> <person id="agu"> <name>Alfred Gusenbauer</name> <party url="http://www.spoe.at">SPÖ</party> </person> <person id="wmo"> <name>Wilhelm Molterer</name> <party url="http://www.oevp.at">ÖVP</party> </person> </staff> descendant child descendant-or-self

  14. XPath Axis Example (attribute) context node <?xml version='1.0' encoding='UTF-8'?> <staff organization="Bundesregierung"> <person id="agu"> <name>Alfred Gusenbauer</name> <party url="http://www.spoe.at">SPÖ</party> </person> <person id="wmo"> <name>Wilhelm Molterer</name> <party url="http://www.oevp.at">ÖVP</party> </person> </staff> attribute

  15. XPath Axis Example (following-sibling) context node <?xml version='1.0' encoding='UTF-8'?> <staff organization="Bundesregierung"> <person id="agu"> <name>Alfred Gusenbauer</name> <party url="http://www.spoe.at">SPÖ</party> </person> <person id="wmo"> <name>Wilhelm Molterer</name> <party url="http://www.oevp.at">ÖVP</party> </person> <person id="abc"> <name>ABC</name> <party url="http://www.abc.at">ABC</party> </person> </staff> following-sibling

  16. XPath Axis Example (preceding-sibling) <?xml version='1.0' encoding='UTF-8'?> <staff organization="Bundesregierung"> <person id="agu"> <name>Alfred Gusenbauer</name> <party url="http://www.spoe.at">SPÖ</party> </person> <person id="wmo"> <name>Wilhelm Molterer</name> <party url="http://www.oevp.at">ÖVP</party> </person> <person id="abc"> <name>ABC</name> <party url="http://www.abc.at">ABC</party> </person> </staff> preceding-sibling context node

  17. XPath Axis Example (preceding) <?xml version='1.0' encoding='UTF-8'?> <staff organization="Bundesregierung"> <person id="agu"> <name>Alfred Gusenbauer</name> <party url="http://www.spoe.at">SPÖ</party> </person> <person id="wmo"> <name>Wilhelm Molterer</name> <party url="http://www.oevp.at">ÖVP</party> </person> <person id="abc"> <name>ABC</name> <party url="http://www.abc.at">ABC</party> </person> </staff> preceding context node

  18. XPath Axis Example (following) context node <?xml version='1.0' encoding='UTF-8'?> <staff organization="Bundesregierung"> <person id="agu"> <name>Alfred Gusenbauer</name> <party url="http://www.spoe.at">SPÖ</party> </person> <person id="wmo"> <name>Wilhelm Molterer</name> <party url="http://www.oevp.at">ÖVP</party> </person> <person id="abc"> <name>ABC</name> <party url="http://www.abc.at">ABC</party> </person> </staff> following

  19. XPath Axis Example (self) context node <?xml version='1.0' encoding='UTF-8'?> <staff organization="Bundesregierung"> <person id="agu"> <name>Alfred Gusenbauer</name> <party url="http://www.spoe.at">SPÖ</party> </person> <person id="wmo"> <name>Wilhelm Molterer</name> <party url="http://www.oevp.at">ÖVP</party> </person> <person id="abc"> <name>ABC</name> <party url="http://www.abc.at">ABC</party> </person> </staff> self

  20. XPathAxis Example (namespace) <?xml version='1.0' encoding='UTF-8'?> <staff organization="Bundesregierung xmlns:breg=“http://www.austria.gv.at/ns/1.0" xmlns="http://generic-ns.org/ns/1.0"> <person id="agu"> <name>Alfred Gusenbauer</name> <breg:party url="http://www.spoe.at">SPÖ</breg:party> </person> <person id="wmo"> <name>Wilhelm Molterer</name> <breg:party url="http://www.oevp.at">ÖVP</breg:party> </person> </staff> NS axis for ‘party’ contains: http://generic-ns.org/ns/1.0breg = http://www.austria.gv.at/ns/1.0

  21. XPath Processing – Summary of axes • ancestor • ancestor-or-self • attribute • child • descendant • descendant-or-self • following • following-sibling • namespace • parent • preceding • preceding-sibling • self

  22. XPath – Long Syntax • The expression • /staff/person can be rewritten as • /child::staff/child::person • Similar for other axes • there are axes expressible in the long form ONLY • Example: preceding-sibling, ancestor-or-self…

  23. XPath – Resources • E. R. Harold – XML in a Nutshell • Chapter on XPathfree on the web: http://www.oreilly.com/catalog/xmlnut/chapter/ch09.html • XPath (and XSLT) Quick Reference Card • http://www.mulberrytech.com/quickref/XSLT_1quickref-v2.pdf

More Related