如何通过在 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>
我想获取一个对象的元素,如果它的类型与另一个对象的 prog 同名(条件:prog extends "SuperClass")。
我的 Xpath:
./objects/object/element[./type/@name={ancestor::objects/object/prog[./extends/text()='SuperClass']/@name}]
I want to get an object's element, if its type has the same name as a prog (condition: prog extends "SuperClass") of another object.
//element[type/@name = //prog[extends = 'SuperClass']/@name]
"Select 所有 <element>
其中 <type>/@name
等于包含 [=18= 的任何 <prog>
的 @name
] 等于 'SuperClass'
"
你几乎已经完成了。 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]
...就是这样。
我正在尝试获取一个带有子元素的元素,该子元素与另一个节点同名(具有特定条件)。 来源:
<objects>
<object>
<element>
<type name="thing"></type>
</element>
</object>
<object>
<prog name="thing">
<extends>SuperClass</extends>
</prog>
</object>
</objects>
我想获取一个对象的元素,如果它的类型与另一个对象的 prog 同名(条件:prog extends "SuperClass")。
我的 Xpath:
./objects/object/element[./type/@name={ancestor::objects/object/prog[./extends/text()='SuperClass']/@name}]
I want to get an object's element, if its type has the same name as a prog (condition: prog extends "SuperClass") of another object.
//element[type/@name = //prog[extends = 'SuperClass']/@name]
"Select 所有 <element>
其中 <type>/@name
等于包含 [=18= 的任何 <prog>
的 @name
] 等于 'SuperClass'
"
你几乎已经完成了。 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]
...就是这样。