XPath将元素中的所有文本作为一个值,删除<wbr />元素

时间:2014-07-16 22:48:21

标签: xpath

我需要在HTML文档中找到以下“a”元素。

<a>
304897: Failing Test Case "CALM501-I20140715-0705-
<wbr/>
Add CD to Cart"
</a>

我为此目的尝试了以下xpath,但由于文本中存在“wbr”元素,因此找不到特定元素。

//a[substring-after(normalize-space(text()),': ')='Failing Test Case "CMAL501-I20140715-0705-Add CD to Cart"']

当“a”元素的文本中不包含“wbr”元素时,上述xpath会起作用。

有人可以帮我找一个合适的xpath吗?

1 个答案:

答案 0 :(得分:0)

您可以尝试这种方式:

//a[substring-after(normalize-space(string(.)),': ')='Failing Test Case "CALM501-I20140715-0705- Add CD to Cart"']

使用XPath string()获取标记内所有文本节点的组合值。给出输入标记的一个例子,这个XPath:

substring-after(normalize-space(string(//a)),': ')

..将返回:

Failing Test Case "CALM501-I20140715-0705- Add CD to Cart"

更新:

原来normalize-space(string(.))返回与normalize-space(.)相同的值,因此这样可以正常工作:

//a[substring-after(normalize-space(.),': ')='Failing Test Case "CALM501-I20140715-0705- Add CD to Cart"']

所以这不是使用string()的问题,而是使用text()的问题,因为后者会单独为您带来每个文本节点,并可能导致意外行为,如您的情况所示。