15

鉴于 HTML 包含:

  <div tagname="779853cd-355b-4242-8399-dc15f95b3276_Destination" class="panel panel-default"></div>

我们如何在 XPath 中编写以下表达式:

查找其属性以字符串 'Destination' 结尾的<div>元素tagname

我一直在寻找几天,我无法想出有效的东西。在许多中,我尝试了例如:

div[contains(@tagname, 'Destination')]
4

4 回答 4

27

XPath 2.0

//div[ends-with(@tagname, 'Destination')]

XPath 1.0

//div[substring(@tagname, string-length(@tagname) 
                          - string-length('Destination') + 1)  = 'Destination']
于 2016-12-02T15:28:11.440 回答
6

XPath 2 或 3:总是有正则表达式。

.//div[matches(@tagname,".*_Destination$")]
于 2016-12-03T17:47:36.980 回答
4

您可以使用ends-with(Xpath 2.0)

//div[ends-with(@tagname, 'Destination')]
于 2016-12-02T15:11:00.790 回答
2

您可以使用下面的 xpath,它将与 Xpath 1.0 一起使用

//div[string-length(substring-before(@tagname, 'Destination')) >= 0 and string-length(substring-after(@tagname, 'Destination')) = 0 and contains(@tagname, 'Destination')]

基本上它会检查在第一次出现之前是否有任何字符串(或没有字符串),Destination但在之后不应该有任何文本Destination

测试输入:

<root>
<!--Ends with Destination-->
<div tagname="779853cd-355b-4242-8399-dc15f95b3276_Destination" class="panel panel-default"></div>
<!--just Destination-->
<div tagname="Destination" class="panel panel-default"></div>
<!--Contains Destination-->
<div tagname="779853cd-355b-4242-8399-dc15f95b3276_Destination_some_text" class="panel panel-default"></div>
<!--Doesn't contain destination-->
<div tagname="779853cd-355b-4242-8399-dc15f95b3276" class="panel panel-default"></div>
</root>

测试输出:

<div class="panel panel-default"
     tagname="779853cd-355b-4242-8399-dc15f95b3276_Destination"/>
<div class="panel panel-default" tagname="Destination"/>
于 2016-12-02T15:27:03.533 回答