我正在尝试引用表达式中的节点。举个简单的例子:
<?xml version="1.0" encoding="UTF-8" ?>
<homelist>
<homes>
<home>
<hname>house</hname>
<location>hell</location>
<url>wee</url>
<cID>1234</cID>
</home>
</homes>
<contacts>
<contactdetails cID="1234">
<cname>John Smith</cname>
<phone>0123234</phone>
<email>test@gmail.com</email>
</contactdetails>
</contacts>
</homelist>
如果节点的值在树中的其他位置,我基本上想要选择节点。
例如,我想显示具有约翰史密斯cID的房屋的网址。我试过这个,但它不起作用,它有什么问题:
homelist/homes/home[ancestor::homelist/contacts/contactdetails[cname="John Smith"]/url
答案 0 :(得分:1)
"/homelist/homes/home[cID = /homelist/contacts/contactdetails[cname='John Smith']/@cID]/url"
您希望找到<home>
孩子的文字内容等于其<cID>
包含cID=
<contactdetails>
的{{1}}属性的<cname>
'John Smith'
},然后返回其<url>
孩子。
请注意,我从根开始将其写为绝对路径,因为您没有告诉我们此XPath的上下文节点是什么。
当然也有其他方式来编写相同的概念;这只是我发现的第一个。
如果您更喜欢使用ancestor
或parent
,则可以说
"/homelist/homes/home[cID = ancestor::homelist/contacts/contactdetails[cname='John Smith']/@cID]/url"