Skip to content

Instantly share code, notes, and snippets.

@bbrother92
Last active September 30, 2022 03:47
Show Gist options
  • Save bbrother92/6f86f26ee46c6b7094b137c177970995 to your computer and use it in GitHub Desktop.
Save bbrother92/6f86f26ee46c6b7094b137c177970995 to your computer and use it in GitHub Desktop.
#xpath #cheatsheet

Xpath cheatsheet

Asterisk vs dot

node1/.   
*** selects contex node (whole node itself) after node1

node1/* 
*** selects only subnodes of node1

/comment() selects all comment nodes which are children of the document root
/company/office selects all 'office' elements which are children of the 'company' element
/company/office[2] '[2]' is short form for second element '[position() = 2]'
/company/office/@location selects the 'location' attribute
/AAA/BBB[last()] last child
/* all element children of the document root
//* all element descendants of the document root
//BBB[@name] elements which have attribute name
//BBB[not(@*)] elements without an attribute
//BBB[@*] elements which have any attribute
//BBB[normalize-space(@name)='bbb'] elements with attribute name = bbb, leading and trailing spaces are removed
//*[count(BBB)=2] elements which have two children BBB
//*[starts-with(name(),'B')] Select all elements name of which starts with letter B
//*[contains(name(),'C')] all elements name of which contain letter C
//a | //b select A or B
//*[string-length(name()) < 3] elements name of which has one or two characters
//tr[@class='even' or @class='odd'] OR ``

Relative path

employee/first_name[ . = 'John'] '.' is used to denote the context node 'first_name
. selects the context node. A dot i.e. '.' is an abbreviated form of the 'self::' axis
../.. the parent element of the parent element of the context node, 'parent::' axis
age/text() text node of the 'age' child element
``

Axis

/child::AAA/child::BBB equivalent of /AAA/BBB
/descendant::* all descendants of document root and therefore all elements /parent::* all parents of DDD element
//FFF/ancestor::* all ancestors of all FFF elements (except sublings elements) /AAA/BBB/following-sibling::* following-sibling axis contains all the following siblings
//CCC/preceding-sibling::* contains all the preceding siblings
/following::* all that after the context node in document order, excluding any descendants and excluding attribute
/ancestor-or-self::* contains context node and the ancestors of context node, root node

Functions

/li[position() mod 2 = 1] odd elements

Examples

//a[contains(@prop,'Foo')] for xml:

<bla>
 <a prop="Foo1"/>
 <a prop="Foo2"/>
 <a prop="3Foo"/>
 <a prop="Bar"/>
</bla>

Consider this:

<html>
  <a>Ask Question<other/>
  </a>
</html>

//a[.="Ask Question"] does not return anything! but //a[text()="Ask Question"] returns all text and <a>

More:

predicate, //div[//x] selects a div if there is an x anywhere in the document,
 while //div[.//x] selects a div if there is an x within the subtree

//a/text() will not find text nested in subtree:

 <a><other>Ask Question</other> </a>

(//first//*)[1] vs //first//*[1]


//E[count(*)=0] element with no children
//E[count(../E) = 1] element with no siblings

Links

Good tester good xpath guide
good xpath guide
good xpath guide
exercises
XML
cheatsheet Мануал по XPath

Game

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment