我正在尝试使用XPath 1.0来选择这些li
元素中的所有文本,但最后一个class="detailCrumb"
除外。
我希望我的结果如下:
Home Photography Memory Cards & Accessories Memory Cards
根据我所在网站的级别,这些面包屑将是动态的,因此我无法指定位置请求 ,例如li[4]
。我怎样才能做到这一点?
<div class="breadcrums-cont">
<ul id="breadcrumbs" ">
<li class="first">Home</li>
<li>Photography</li>
<li>Memory Cards & Accessories</li>
<li>Memory Cards</li>
<li class="detailCrumb">SanDisk Extreme Pro</li>
</ul>
</div>
答案 0 :(得分:3)
要使用“detailCrumb”类来处理li标签,请使用not()函数
//ul[@id="breadcrumbs"]/li[not(@class="detailCrumb")]
答案 1 :(得分:0)
通常的答案是,您可以连接固定的项目数量:
concat(//ul[@id="breadcrumbs"]/li[not(@class="detailCrumb")][1], ' ',
//ul[@id="breadcrumbs"]/li[not(@class="detailCrumb")][2], ' ',
//ul[@id="breadcrumbs"]/li[not(@class="detailCrumb")][3])
要连接一个变量项目数as @splash58 has said (+1),你必须使用调用XPath的语言的字符串连接工具 - 单独的XPath 1.0不能这样做。
但是,如果您从整个列表的字符串值开始,然后删除不需要的字符串,
normalize-space(
substring-before(//ul[@id="breadcrumbs"],
//ul[@id="breadcrumbs"]/li[@class="detailCrumb"]))
然后您就可以获得所需的结果:
Home Photography Memory Cards & Accessories Memory Cards
您可以通过string-join()
在XPath中加入变量项目数量:
string-join(//ul[@id="breadcrumbs"]/li[not(@class="detailCrumb")], ' ')
返回
Home Photography Memory Cards & Accessories Memory Cards
按要求。