微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

xpath中的dot如何在识别元素和匹配文本时采取多种形式

如何解决xpath中的dot如何在识别元素和匹配文本时采取多种形式

由于标记,因此此答案将基于xpath-1.0和关联的XML路径语言(XPath)版本1.0规范。


包含(字符串,字符串)

boolean contains(string, string)如果第一个参数字符串包含第二个参数字符串,则该函数返回true,否则返回false。举个例子:

//h3[contains(.,'Associated Elements')]

文字节点

字符数据被分组为文本节点。将尽可能多的字符数据分组到每个文本节点中。文本节点的 字符串值 是字符数据。文本节点始终至少具有一个字符数据。在下面的示例中,text()选择上下文节点的所有文本节点子级:

//h3[text()='Associated Elements']

在用例中,HTML中的文本 具有 可以将可选地被称为 或 , 中的编程来创建的线的空间不能被打破使用通过自动换行。在HTML中,您可以创建多个在网页上可见的空间,而不仅仅是在源代码中。


分析您的代码试用

您的第一次代码试用:

//h3[contains(.,'Associated Elements')]

在成功使用部分文本标识的元素时定位 元素

您的第二个代码试用版:

//h3[contains(text(),'Associated Elements')]

因为该元素包含一些其他字符,例如 ,除了文本 Associated Elements之外


解决方法

我具有以下dom结构:

<h3 class="popover-title">
 <div class="popup-title">
   <div class="title-txt">Associated Elements&nbsp;&nbsp(5)</div>
 </div>
</h3>

我正在尝试编写一个xpath,它将在h3标签下标识标题“ Associated Elements”。

当我的xpath是

//div[contains(@class,popover)]//h3[contains(.,'Associated Elements')]

元素被识别。

但是当我的xpath是

//div[contains(@class,popover)]//h3[contains(text(),'Associated Elements')]

该元素未被识别。根据我的理解,dot(。)可以替代text(),但是为什么当我使用text()函数时却不能识别元素。

但是,对于另一个dom结构:

<h3 class="popover-title">
   <a class="btn-popover" href="#">x</a>
   "Associated Elements"
</h3>

xpath:

//div[contains(@class,'Associated Elements')]

//div[contains(@class,'Associated Elements')]

工作良好。

有人可以解释这两种情况下dot(。)的行为吗?

有没有更好的方法来编写对两个示例都适用的xpath?请提出建议。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。