获取Xpath到节点的各个部分

时间:2015-12-16 20:04:53

标签: arrays xml xpath

我是XPath的新手,很抱歉,如果这对你来说是一个愚蠢的问题。 我需要提取一个没有" $"的价格。从第一个span class =" price"

<span class="price">
    <span class="sup">$</span>
    1
    <span class="currency-delimiter">.</span>
    <span class="sup">23</span>
</span>
<span class="price">
    <span class="sup">$</span>
    4
    <span class="currency-delimiter">.</span>
    <span class="sup">56</span>
</span>
<span class="price">
    <span class="sup">$</span>
    7
    <span class="currency-delimiter">.</span>
    <span class="sup">89</span>
</span>

我带来的Xpath是

  

//跨度[@class =&#39;价格&#39;])[1]

但它给了我一个每个元素的数组[$] [1] [。] [23] 我只需要1.23而不需要&#34; $&#34;。你可以帮帮我吗? 谢谢!

1 个答案:

答案 0 :(得分:1)

在XPath 1.0中,您可以使用节点上的string函数来获取其中的所有文本。例如string(//span[@class='price'][1])(如果您在节点集上使用它,也就是节点数组,它将自动仅应用于第一个节点。See the official specification以获取更多详细信息。)

请注意,这将包括所有空格(即'\n $\n 1\n .\n 23\n',其中\n代表换行符,因此您可能希望使用normalize-space function删除前导空格并替换每个其他实例具有单个空格字符的空格,这将使结果更像$ 1 . 23

现在,要从头开始删除$字符,我建议您使用substring-after function,因为无论您是否使用上述normalize-space函数都无关紧要,像这样:substring-after(normalize-space(string(//span[@class='price'])), '$')

现在,值得注意的是substring-after(和normalize-space)将隐式调用string函数,因此您可以安全地省略它并只使用substring-after(normalize-space(//span[@class='price']), '$ ')。在此示例中,我将第二个参数更改为substring-after$,以便$之后的空格也将被删除。