<bookstore>
<book>
<title lang="en" id="1">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="en" id="2">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
<photostore>
<photo>
<title lang="en" id="3">Learning XPATH</title>
<price>1.00</price>
</photo>
</photostore>
What I trying to achieve is that XPath shows everything (including parents and anchestors) of id=1 and id=3
Output should be:
<bookstore>
<book>
<title lang="en" id="1">Harry Potter</title>
<price>29.99</price>
</book>
</bookstore>
<photostore>
<photo>
<title lang="en" id="3">Learning XPATH</title>
<price>1.00</price>
</photo>
</photostore>
I am using BaseX 9.5.1 Beta
XQuery
declare context item := document {
<bookstore>
<book>
<title lang="en" id="1">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="en" id="2">Learning XML</title>
<price>39.95</price>
</book>
<photostore>
<photo>
<title lang="en" id="3">Learning XPATH</title>
<price>1.00</price>
</photo>
</photostore>
</bookstore>
};
<bookstore>
{
for $x in ./bookstore/*[descendant::*/@id=("1","3")]
return $x
}
</bookstore>
Output
<bookstore>
<book>
<title lang="en" id="1">Harry Potter</title>
<price>29.99</price>
</book>
<photostore>
<photo>
<title lang="en" id="3">Learning XPATH</title>
<price>1.00</price>
</photo>
</photostore>
</bookstore>