我得到了以下(简化)HTML:
<ul>
<li class="item c-MessageRow green">
<div>Hello and </div>
<div>welcome
<div> to</div>
</div>
<div> my site</div>
</li>
</ul>
现在我想选择具有类&#34; c-MessageRow&#34;的li元素。并包含内部文字&#34;欢迎来到我的网站&#34;。
我尝试过以下方法:
//li[contains(@class, 'c-MessageRow') and contains(text(), 'welcome to my site')]
但它什么也没有回报。我在这里做错了什么?
答案 0 :(得分:2)
当你例如将Xpath更改为
//li[contains(@class, 'c-MessageRow') and contains(div/text(), 'Hello')]
或
//li[contains(@class, 'c-MessageRow') and
contains(div/following-sibling::div/text(), 'welcome')]
返回li
。
Xpath的问题是,带有c-MessageRow类的li
不包含“欢迎访问我的网站”文本,而是包含文本“Hello”的div
,另一个{{1} }如果您必须检查div
中是否包含全文,或者仅匹配其中的一部分是否足够,则问题是“欢迎”等文本。
更新:检查课程和li的完整文本可以这样做:
li
//li[contains(@class, 'c-MessageRow') and
contains(normalize-space(string(self::li)), 'welcome to my site')]
负责删除任何尾随或前导空格和换行符。这是必要的,因为使用Xpath normalize-space()
(结果可能会有所不同,使用在线Xpath测试器测试)看起来像这样:
string(//li)
使用Hello and
welcome
to
my site
会导致:
normalize-space(string(//li))