introduction to xpath - university of...
TRANSCRIPT
![Page 1: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/1.jpg)
Introduction to XPath
TEI@Oxford
July 2009
![Page 2: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/2.jpg)
XPath
XPath is the basis of most other XML querying and transformationlanguages. It is just a way of locating nodes in an XML document.
![Page 3: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/3.jpg)
Accessing your TEI document
So you've created some TEI XML documents, what now?
• XPath• XML Query (XQuery)• XSLT Tranformation to another format (HTML, PDF, RTF, CSV,etc.)
• Custom Applications (Xaira, TEIPublisher, Philologic etc.)
![Page 4: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/4.jpg)
What is XPath?
• It is a syntax for accessing parts of an XML document• It uses a path structure to define XML elements• It has a library of standard functions• It is a W3C Standard• It is one of the main components of XQuery and XSLT
![Page 5: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/5.jpg)
Example text
<body n="anthology"><div type="poem"><head>The SICK ROSE </head><lg type="stanza"><l n="1">O Rose thou art sick.</l><l n="2">The invisible worm,</l><l n="3">That flies in the night </l><l n="4">In the howling storm:</l>
</lg><lg type="stanza"><l n="5">Has found out thy bed </l><l n="6">Of crimson joy:</l><l n="7">And his dark secret love </l><l n="8">Does thy life destroy.</l>
</lg></div>
</body>
![Page 6: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/6.jpg)
XML Structure
body type=“anthology”
div type=“poem”
div type=“shortpoem”
head
head
lg type=“stanza”
lg type=“couplet”
l n=“4”
l n=“6”
l n=“2”
l n=“3”
l n=“7”
l n=“1”
l n=“8”
l n=“5”
l n=“1”
lg type=“stanza”
l n=“2”l n=“2”
l n=“2”
Really attributes (and text) are separate nodes!
![Page 7: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/7.jpg)
/body/div/head
body type=“anthology”
div type= “poem”
div type= “shortpoem”
head
head
lg type=“stanza”
lg type=“couplet”
l n=“4”
l n=“6”
l n=“2”
l n=“3”
l n=“7”
l n=“1”
l n=“8”
l n=“5”
l n=“1”
lg type=“stanza”
l n=“2”l n=“2”
l n=“2”
XPath locates any matching nodes
![Page 8: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/8.jpg)
/body/div/lg ?
body type=“anthology”
div type=“poem”
div type=“shortpoem”
head
head
lg type=“stanza”
lg type=“couplet”
l n=“4”
l n=“6”
l n=“2”
l n=“3”
l n=“7”
l n=“1”
l n=“8”
l n=“5”
l n=“1”
lg type=“stanza”
l n=“2”l n=“2”
l n=“2”
![Page 9: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/9.jpg)
/body/div/lg
body type=“anthology”
div type=“poem”
div type=“shortpoem”
head
head
lg type=“stanza”
lg type=“couplet”
l n=“4”
l n=“6”
l n=“2”
l n=“3”
l n=“7”
l n=“1”
l n=“8”
l n=“5”
l n=“1”
lg type=“stanza”
l n=“2”l n=“2”
l n=“2”
![Page 10: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/10.jpg)
/body/div/@type ?
body type=“anthology”
div type=“poem”
div type=“shortpoem”
head
head
lg type=“stanza”
lg type=“couplet”
l n=“4”
l n=“6”
l n=“2”
l n=“3”
l n=“7”
l n=“1”
l n=“8”
l n=“5”
l n=“1”
lg type=“stanza”
l n=“2”l n=“2”
l n=“2”
@ = attributes
![Page 11: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/11.jpg)
/body/div/@type
body type=“anthology”
div type= “poem”
div
head
head
lg type=“stanza”
lg type=“couplet”
l n=“4”
l n=“6”
l n=“2”
l n=“3”
l n=“7”
l n=“1”
l n=“8”
l n=“5”
l n=“1”
lg type=“stanza”
l n=“2”l n=“2”
l n=“2”
type=“poem”
type=“shortpoem”
![Page 12: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/12.jpg)
/body/div/lg/l ?
body type=“anthology”
div type=“poem”
div type=“shortpoem”
head
head
lg type=“stanza”
lg type=“couplet”
l n=“4”
l n=“6”
l n=“2”
l n=“3”
l n=“7”
l n=“1”
l n=“8”
l n=“5”
l n=“1”
lg type=“stanza”
l n=“2”l n=“2”
l n=“2”
![Page 13: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/13.jpg)
/body/div/lg/l
body type=“anthology”
div type=“poem”
div type=“shortpoem”
head
head
lg type=“stanza”
lg type=“couplet”
l n=“4”
l n=“6”
l n=“2”
l n=“3”
l n=“7”
l n=“1”
l n=“8”
l n=“5”
l n=“1”
lg type=“stanza”
l n=“2”l n=“2”
l n=“2”
![Page 14: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/14.jpg)
/body/div/lg/l[@n=“2”] ?
body type=“anthology”
div type=“poem”
div type=“shortpoem”
head
head
lg type=“stanza”
lg type=“couplet”
l n=“4”
l n=“6”
l n=“2”
l n=“3”
l n=“7”
l n=“1”
l n=“8”
l n=“5”
l n=“1”
lg type=“stanza”
l n=“2”l n=“2”
l n=“2”
Square Brackets Filter Selection
![Page 15: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/15.jpg)
/body/div/lg/l[@n=“2”]
body type=“anthology”
div type=“poem”
div type=“shortpoem”
head
head
lg type=“stanza”
lg type=“couplet”
l n=“4”
l n=“6”
l n=“2”
l n=“3”
l n=“7”
l n=“1”
l n=“8”
l n=“5”
l n=“1”
lg type=“stanza”
l n=“2”l n=“2”
l n=“2”
![Page 16: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/16.jpg)
/body/div[@type=“poem”]/head ?
body type=“anthology”
div type=“poem”
div type=“shortpoem”
head
head
lg type=“stanza”
lg type=“couplet”
l n=“4”
l n=“6”
l n=“2”
l n=“3”
l n=“7”
l n=“1”
l n=“8”
l n=“5”
l n=“1”
lg type=“stanza”
l n=“2”l n=“2”
l n=“2”
![Page 17: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/17.jpg)
/body/div[@type=“poem”]/head
body type=“anthology”
div type=“poem”
div type=“shortpoem”
head
head
lg type=“stanza”
lg type=“couplet”
l n=“4”
l n=“6”
l n=“2”
l n=“3”
l n=“7”
l n=“1”
l n=“8”
l n=“5”
l n=“1”
lg type=“stanza”
l n=“2”l n=“2”
l n=“2”
![Page 18: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/18.jpg)
//lg[@type=“stanza”] ?
body type=“anthology”
div type=“poem”
div type=“shortpoem”
head
head
lg type=“stanza”
lg type=“couplet”
l n=“4”
l n=“6”
l n=“2”
l n=“3”
l n=“7”
l n=“1”
l n=“8”
l n=“5”
l n=“1”
lg type=“stanza”
l n=“2”l n=“2”
l n=“2”
// = any descendant
![Page 19: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/19.jpg)
//lg[@type=“stanza”]
body type=“anthology”
div type=“poem”
div type=“shortpoem”
head
head
lg type=“stanza”
lg type=“couplet”
l n=“4”
l n=“6”
l n=“2”
l n=“3”
l n=“7”
l n=“1”
l n=“8”
l n=“5”
l n=“1”
lg type=“stanza”
l n=“2”l n=“2”
l n=“2”
![Page 20: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/20.jpg)
//div[@type=“poem”]//l ?
body type=“anthology”
div type=“poem”
div type=“shortpoem”
head
head
lg type=“stanza”
lg type=“couplet”
l n=“4”
l n=“6”
l n=“2”
l n=“3”
l n=“7”
l n=“1”
l n=“8”
l n=“5”
l n=“1”
lg type=“stanza”
l n=“2”l n=“2”
l n=“2”
![Page 21: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/21.jpg)
//div[@type=“poem”]//l
body type=“anthology”
div type=“poem”
div type=“shortpoem”
head
head
lg type=“stanza”
lg type=“couplet”
l n=“4”
l n=“6”
l n=“2”
l n=“3”
l n=“7”
l n=“1”
l n=“8”
l n=“5”
l n=“1”
lg type=“stanza”
l n=“2”l n=“2”
l n=“2”
![Page 22: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/22.jpg)
//l[5] ?
body type=“anthology”
div type=“poem”
div type=“shortpoem”
head
head
lg type=“stanza”
lg type=“couplet”
l n=“4”
l n=“6”
l n=“2”
l n=“3”
l n=“7”
l n=“1”
l n=“8”
l n=“5”
l n=“1”
lg type=“stanza”
l n=“2”l n=“2”
l n=“2”
Square brackets can also filter by counting
![Page 23: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/23.jpg)
//l[5]
body type=“anthology”
div type=“poem”
div type=“shortpoem”
head
head
lg type=“stanza”
lg type=“couplet”
l n=“4”
l n=“6”
l n=“2”
l n=“3”
l n=“7”
l n=“1”
l n=“8”
l n=“5”
l n=“1”
lg type=“stanza”
l n=“2”l n=“2”
l n=“2”
![Page 24: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/24.jpg)
//lg/../@type ?
body type=“anthology”
div type=“poem”
div type=“shortpoem”
head
head
lg type=“stanza”
lg type=“couplet”
l n=“4”
l n=“6”
l n=“2”
l n=“3”
l n=“7”
l n=“1”
l n=“8”
l n=“5”
l n=“1”
lg type=“stanza”
l n=“2”l n=“2”
l n=“2”
Paths are relative: .. = parent
![Page 25: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/25.jpg)
//lg/../@type
body type=“anthology”
div type= “poem”
div
head
head
lg type=“stanza”
lg type=“couplet”
l n=“4”
l n=“6”
l n=“2”
l n=“3”
l n=“7”
l n=“1”
l n=“8”
l n=“5”
l n=“1”
lg type=“stanza”
l n=“2”l n=“2”
l n=“2”
type=“poem”
type=“shortpoem”
![Page 26: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/26.jpg)
//l[@n > 5] ?
body type=“anthology”
div type=“poem”
div type=“shortpoem”
head
head
lg type=“stanza”
lg type=“couplet”
l n=“4”
l n=“6”
l n=“2”
l n=“3”
l n=“7”
l n=“1”
l n=“8”
l n=“5”
l n=“1”
lg type=“stanza”
l n=“2”l n=“2”
l n=“2”
Numerical operations can be useful.
![Page 27: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/27.jpg)
//l[@n > 5]
body type=“anthology”
div type=“poem”
div type=“shortpoem”
head
head
lg type=“stanza”
lg type=“couplet”
l n=“4”
l n=“6”
l n=“2”
l n=“3”
l n=“7”
l n=“1”
l n=“8”
l n=“5”
l n=“1”
lg type=“stanza”
l n=“2”l n=“2”
l n=“2”
![Page 28: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/28.jpg)
//div[head]/lg/l[@n=“2”] ?
body type=“anthology”
div type=“poem”
div type=“shortpoem”
head
lg type=“stanza”
lg type=“couplet”
l n=“4”
l n=“6”
l n=“2”
l n=“3”
l n=“7”
l n=“1”
l n=“8”
l n=“5”
l n=“1”
lg type=“stanza”
l n=“2”l n=“2”
l n=“2”
Notice the deleted <head> !
![Page 29: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/29.jpg)
//div[head]/lg/l[@n=“2”]
body type=“anthology”
div type=“poem”
div type=“shortpoem”
head
lg type=“stanza”
lg type=“couplet”
l n=“4”
l n=“6”
l n=“2”
l n=“3”
l n=“7”
l n=“1”
l n=“8”
l n=“5”
l n=“1”
lg type=“stanza”
l n=“2”l n=“2”
l n=“2”
![Page 30: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/30.jpg)
//l[ancestor::div/@type=“shortpoem”] ?
body type=“anthology”
div type=“poem”
div type=“shortpoem”
head
head
lg type=“stanza”
lg type=“couplet”
l n=“4”
l n=“6”
l n=“2”
l n=“3”
l n=“7”
l n=“1”
l n=“8”
l n=“5”
l n=“1”
lg type=“stanza”
l n=“2”l n=“2”
l n=“2”
ancestor:: is an unabbreviated axis name
![Page 31: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/31.jpg)
//l[ancestor::div/@type=“shortpoem”]
body type=“anthology”
div type=“poem”
div type=“shortpoem”
head
head
lg type=“stanza”
lg type=“couplet”
l n=“4”
l n=“6”
l n=“2”
l n=“3”
l n=“7”
l n=“1”
l n=“8”
l n=“5”
l n=“1”
lg type=“stanza”
l n=“2”l n=“2”
l n=“2”
![Page 32: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/32.jpg)
XPath: More About Paths
• A location path results in a node-set• Paths can be absolute (/div/lg[1]/l)• Paths can be relative (l/../../head)• Formal Syntax: (axisname::nodetest[predicate])• For example:child::div[contains(head, 'ROSE')]
![Page 33: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/33.jpg)
XPath: Axes
ancestor:: Contains all ancestors (parent, grandparent, etc.) ofthe current node
ancestor-or-self:: Contains the current node plus all itsancestors (parent, grandparent, etc.)
attribute:: Contains all attributes of the current node
child:: Contains all children of the current node
descendant:: Contains all descendants (children, grandchildren,etc.) of the current node
descendant-or-self:: Contains the current node plus all itsdescendants (children, grandchildren, etc.)
![Page 34: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/34.jpg)
XPath: Axes (2)
following:: Contains everything in the document after theclosing tag of the current node
following-sibling:: Contains all siblings after the currentnode
parent:: Contains the parent of the current node
preceding:: Contains everything in the document that is beforethe starting tag of the current node
preceding-sibling:: Contains all siblings before the currentnode
self:: Contains the current node
![Page 35: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/35.jpg)
Axis examples
• ancestor::lg = all <lg> ancestors• ancestor-or-self::div = all <div> ancestors or current• attribute::n = n attribute of current node• child::l = <l> elements directly under current node• descendant::l = <l> elements anywhere under currentnode
• descendant-or-self::div = all <div> children or current• following-sibling::l[1] = next <l> element at this level• preceding-sibling::l[1] = previous <l> element at thislevel
• self::head = current <head> element
![Page 36: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/36.jpg)
XPath: Predicates
• child::lg[attribute::type='stanza']• child::l[@n='4']• child::div[position()=3]• child::div[4]• child::l[last()]• child::lg[last()-1]
![Page 37: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/37.jpg)
XPath: Abbreviated Syntax
• nothing is the same as child::, so lg is short for child::lg• @ is the same as attribute::, so @type is short forattribute::type
• . is the same as self::, so ./head is short forself::node()/child::head
• .. is the same as parent::, so ../lg is short forparent::node()/child::lg
• // is the same as descendant-or-self::, so div//l is shortforchild::div/descendant-or-self::node()/child::l
![Page 38: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/38.jpg)
XPath: Functions
• XPath contains numerous functions: you've seen 'last()'already. There are also many other functions, including:Conversion: boolean, string, number
Math: ceiling, floor, round, sumLogic: true, false, not
Nodes: lang, name, namespace-uri, textContexts: count, function-available, last, positionStrings: contains, concat, normalize-space, starts-with,
string-length, substring, substring-after,substring-before, translate
and many more!
![Page 39: Introduction to XPath - University of Oxfordtei.it.ox.ac.uk/Talks/2009-07-oxford/talk-14-xpath.pdf · Introduction to XPath Author: TEI@Oxford Created Date: 7/24/2009 3:44:18 PM](https://reader033.vdocuments.mx/reader033/viewer/2022042806/5f74163ccca6091a7f52e61b/html5/thumbnails/39.jpg)
XPath: Where can I use XPath?
Learning XPath, though a bit tiring to begin with, can be very usefulas they are used throughout XML technologies, but especially inXSLT and XQuery.