1

在一个页面 HTML 中,有几个 HTML 链接,其名称包含一些子节点。

我只想检索其中一个;以下:

<a href='foo'>
   <b>Bar</b>
   <div style="height: 18px;">Garbo</div>
</a>

为了定位它,我想用 xpath 精确:“给我带来包含“Bar”和“Garbo”的链接,不管它们是否在单独的子节点中“。

我试试这个,但是在阅读了一些关于contains函数的文章之后,这条线永远行不通:

//a[contains(text(),"Bar") and contains(text(),"Garbo")]

我可以做些什么来满足我的要求?

4

2 回答 2

4

您需要使用的选择器是

//a[./*[contains(text(),"Bar")] and ./*[contains(text(),"Garbo")]]
于 2012-07-16T12:13:01.733 回答
1

使用

//a[descendant::text()[contains(., 'Bar')] 
  and 
    descendant::text()[contains(., 'Garbo')]
    ]

a这将选择具有包含字符串“Bar”的后代(不仅是子)文本节点和包含字符串“Garbo”的后代文本节点的任何元素。

这会选择想要的a元素,即使它是以下元素

<a href='foo'>
   <b><i>Bar</i></b>
   <div style="height: 18px;"><span>Garbo</span></div>
</a>
于 2012-07-16T12:30:35.040 回答