XPath表达式,用于查找具有属性但不包含那些后代的任何后代的后代

时间:2018-10-09 19:01:13

标签: html xml xpath

我正在尝试找到一个 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']

但是这将返回具有该属性的所有后代。而且我不确定如何排除已经具有该属性的后代的后代。

因此,如果有人可以帮助我完成这个表情,将不胜感激!

0 个答案:

没有答案