通过XPath 1.0连接可变数量的元素字符串值?

时间:2017-12-08 17:02:53

标签: html xml xpath xpath-1.0

我正在尝试使用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 &amp; Accessories</li> 
        <li>Memory Cards</li>
        <li class="detailCrumb">SanDisk Extreme Pro</li>    
    </ul>
</div>

2 个答案:

答案 0 :(得分:3)

要使用“detailCrumb”类来处理li标签,请使用not()函数

//ul[@id="breadcrumbs"]/li[not(@class="detailCrumb")]

答案 1 :(得分:0)

XPath 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

XPath 2.0

您可以通过string-join()在XPath中加入变量项目数量:

string-join(//ul[@id="breadcrumbs"]/li[not(@class="detailCrumb")], ' ')

返回

Home Photography Memory Cards & Accessories Memory Cards 

按要求。