祖先和祖先或自身之间的区别

7
我知道XPath中的祖先,但是什么是ancestor-or-self?在什么情况下需要使用它?请给我一些示例。
2个回答

14

我认为轴名称相当自解释。ancestor 轴仅选择当前上下文元素的祖先,而 ancestor-or-self 选择包括当前元素在内的祖先。例如,请考虑以下 XML:

<root>
    <item key="a">
        <item key="b" target="true">
            <context key="c" target="true"/>
        </item>
    </item>
</root>
以下xpath使用了ancestor轴,将会找到具有target属性等于true的项目b,因为bcontext元素的祖先。但是该XPath不会选择context元素本身,尽管它也具有target等于true
//context/ancestor::*[@target='true']

XPath测试器中,上述XPath的输出结果为:

Element='<item key="b" target="true">
  <context key="c" target="true" />
</item>'

ancestor-or-self轴相反,它会返回相同的结果,并包括context元素:

//context/ancestor-or-self::*[@target='true']

第二个XPath的输出:

Element='<item key="b" target="true">
  <context key="c" target="true" />
</item>'
Element='<context key="c" target="true" />'

谢谢您的解释,我明白了。 - J_Coder

2
祖先和祖先自身是XPath轴。轴是相对于当前节点的节点集。
祖先轴选择所有祖先,即父母、祖父母等,而祖先自身选择当前节点及其所有祖先,即父母、祖父母等。
祖先自身通常用于定位XML文档标签或XSLT中,它是一种针对XML设计的转换语言,可将结构化文档转换为其他格式(如XML、HTML和纯文本)。
我认为,在Selenium Webdriver中不需要使用这些轴来查找XPath,因为它处理的是HTML标签而不是XML标签,并且还有许多其他XPath轴可以帮助查找元素。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接