XPath选择具有某些属性值的节点等于其他某个节点的属性值的节点


87
<grand id="grand">
  <parent>
    <child age="18" id="#not-grand"/>
    <child age="20" id="#grand"/> <!-- This is what I want to locate -->
  </parent>
</grand>

有人可以告诉我如何表达对第二个孩子的定位吗?

这不行...

"/grand/parent/child[@id=concat('#',/grand/@id)]/@age"

谢谢。


对不起。表达式确定。我发现我在其他方面遇到了一些问题,而不是表达本身。


3
您的xpath对我来说很好。
dogbane

3
对我来说也一样-刚刚在这里进行了测试,它选择了第二个子元素。
2011年

2
对...表情还可以。对不起。我在表达式(命名空间前缀)和实例文档中犯了一些错误。谢谢。
Jin Kwon

Answers:


95

该XPath特定于您提供的代码段。要选择<child>ID为#grand您可以编写的代码//child[@id='#grand']

为了变老 //child[@id='#grand']/@age

希望这可以帮助


1
谢谢瓦曼。它有帮助。我的意思是引用表达式('/ grand / @ id')进行一次评估,而不是应首先评估的值('#grand')。
Jin Kwon

如果我的XML具有带有name属性的节列表,该如何选择作为subDataSource呢?示例: <section name="valuation"> <capital-value> some data </capital-value> <location> some data </location> </section> <section name="subject-property"> <address>72 Gordon Avenue</address> <postcode>HA7 3QS</postcode> <bedrooms>2</bedrooms> </section>
Sanjay Sahani

30

我认为这是您想要的:

/grand/parent/child[@id="#grand"]

2
谢谢MarcoS。我的意思是引用表达式('/ grand / @ id')进行一次评估,而不是应首先评估的值('#grand')。
Jin Kwon

2
@金权:我明白了。因此,您认为XPath很好。
MarcoS 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.