我正在尝试找到一个 XPath表达式,该表达式选择具有特定属性的元素的所有后代,但不包含那些元素的任何后代< / strong>具有该属性。
为了说明我的意思,下面是一个示例:
<div element-id="1" data-type="TreeView">
<div element-id="2" data-type=Border">
<div element-id="3" data-type="TreeViewItem" data-value="Shapes">
<div element-id="4" data-type="TreeViewItem" data-value="Triagles">
<div delement-id="5" data-type="TreeViewItem" data-value="Isosceles"></div>
</div>
<div element-id="6" data-type="TreeViewItem" data-value="Quadrilaterals">
<div element-id="7" data-type=Border">
<div element-id="8" data-type="TreeViewItem" data-value="Square"></div>
<div element-id="9" data-type="TreeViewItem" data-value="Rectangle"></div>
<div element-id="10" data-type="TreeViewItem" data-value="Rhombus"></div>
</div>
</div>
<div element-id="12" data-type="TreeViewItem" data-value="Pentagons">
</div>
</div>
</div>
</div>
如果我要在上述html上使用所需的搜索表达式,则将元素1(“ element-id”等于“ 1”)作为当前元素,并搜索“ data-type”等于“ TreeViewItem”。然后表达式将仅返回元素3。
还有其他一些元素,其中“数据类型”等于“ TreeViewItem”,但是由于它们都是元素3的后代,因此将它们从搜索结果中排除。
另一个例子是,如果元素3是当前元素,并使用所需表达式(其中“数据类型”等于“ TreeViewItem”)搜索所有后代,则将返回元素4、6和12。但是他们的后代都不会有。
也是重要的区别。这些元素不一定是当前搜索元素的直接子元素。这就是为什么重要的是寻找后代而不是直接的孩子。
目前,我对XPath表达式的了解是:
.//div[@data-type='TreeViewItem']
但是这将返回具有该属性的所有后代。而且我不确定如何排除已经具有该属性的后代的后代。
因此,如果有人可以帮助我完成这个表情,将不胜感激!