繁体   English   中英

如何使用 XPath 中的属性比较 select 元素

[英]How to select an element by using attribute comparsion in XPath

我正在尝试获取具有子节点的元素,该子节点与另一个节点具有相同的名称(具有特定条件)。 资源:

<objects>

  <object>
    <element>
      <type name="thing"></type>
    </element>
  </object>

  <object>
    <prog name="thing">
      <extends>SuperClass</extends>
    </prog>
  </object>

</objects>

我想获取一个对象的元素,如果它的类型与另一个 object 的 prog(条件:prog 扩展“SuperClass”)具有相同的名称。

我的 Xpath:

./objects/object/element[./type/@name={ancestor::objects/object/prog[./extends/text()='SuperClass']/@name}]

我想获取一个对象的元素,如果它的类型与另一个 object 的 prog(条件:prog 扩展“SuperClass”)具有相同的名称。

//element[type/@name = //prog[extends = 'SuperClass']/@name]

"选择所有<element> ,其中<type>/@name等于任何<prog>@name ,其中包含等于'SuperClass'<extends> "

你几乎已经拥有它了。 XPath 没有属性值模板(即花括号中的表达式) - 这是 XSLT 功能,在这里甚至不需要。 失去他们,它的工作原理:

./objects/object/element[./type/@name=ancestor::objects/object/prog[./extends/text()='SuperClass']/@name]

一旦你剪掉了绒毛(例如./无论如何大部分时间都是隐含的,以及/text() ,它会做一些你经常不想要的事情),它看起来很像我的表达方式。

//element[type/@name = ancestor::objects//prog[extends='SuperClass']/@name]

如果您无论如何都开始查看文档根目录,那么ancestor::也是多余的。

//element[type/@name = //prog[extends = 'SuperClass']/@name]

……就是这样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM