xpath to select all parents and all children

For the first query use:

//role[@key = 'add-user']/ancestor::*

For the second:

//role[@key = 'security-admin']//*

You always have a context node that you define as being an element with a specific attribute value, e.g. "add-user" or "security-admin":

//*[@key = "string"]

As this gives you a nodeset the expression for the context node needs to exclude all non-single elements of such a kind:

//*[@key = "string" and count(//*[@key = "string"]) = 1]

This solves the needs for your context node. You can then represent that contextnode with either the . or write it in there verbatim.

Select all parents, grandparents, grand-grandparents and so on of the context element (that is the ancestor axis):

./ancestor::*
//*[@key = "string" and count(//*[@key = "string"]) = 1]/ancestor::*

Select all children (that is the descendant axis):

./descendant::*
.//*
//*[@key = "string" and count(//*[@key = "string"]) = 1]/descendant::*
//*[@key = "string" and count(//*[@key = "string"]) = 1]//*

Tags:

Xml

Xpath

Xslt