[英]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.