XPath表达式引用节点

时间:2014-03-15 17:18:48

标签: xpath

我正在尝试引用表达式中的节点。举个简单的例子:

<?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

1 个答案:

答案 0 :(得分:1)

"/homelist/homes/home[cID = /homelist/contacts/contactdetails[cname='John Smith']/@cID]/url"

您希望找到<home>孩子的文字内容等于其<cID>包含cID= <contactdetails>的{​​{1}}属性的<cname> 'John Smith' },然后返回其<url>孩子。

请注意,我从根开始将其写为绝对路径,因为您没有告诉我们此XPath的上下文节点是什么。

当然也有其他方式来编写相同的概念;这只是我发现的第一个。

如果您更喜欢使用ancestorparent,则可以说

"/homelist/homes/home[cID = ancestor::homelist/contacts/contactdetails[cname='John Smith']/@cID]/url"