获取节点部分的Xpath

3

我对XPath不太熟悉,如果这对你来说是个愚蠢的问题,请见谅。 我需要从第一个span类中提取没有"$"符号的价格。

<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>

我想要翻译的内容是 IT 技术相关内容,以下是要翻译的文本:

我使用的 Xpath 如下:

//span[@class='price'])[1]

但它会返回一个包含每个元素 [$][1][.][23] 的数组,而我只需要 1.23,不需要 "$" 符号。你能帮助我吗?谢谢!


你有尝试过什么吗?比如使用谷歌搜索吗? - Pavlin
2
你可以尝试使用 substring-after(//span[@class='price'], '$'),但它会包含数字之间的空格,因为原始文档中存在空格。 - Keith Hall
我认为我的答案应该在这里:http://stackoverflow.com/questions/29650555/xpath-to-return-a-array-of-string-concatenation-of-multiples-child-node-values,并且需要使用“substring-after”。如果我先找到了,我会告诉你的。 - Yevgen Ko
substring-after 将节点数组展平为它们所包含的文本,因为隐式的 string 函数会自动运行。试试看 :) - Keith Hall
@KeithHall,请将您的评论提交为答案,以便我接受! - Yevgen Ko
显示剩余6条评论
1个回答

1
在XPath 1.0中,您可以对节点使用string函数以获取其内部的所有文本。例如:string(//span[@class='price'][1])(如果您将其用于节点集,也就是节点数组,则会自动仅应用于第一个节点。请参见官方规范以获取更多详细信息。)
请注意,这将包括所有空格(即'\n $\n 1\n .\n 23\n'其中\n表示换行符),因此您可能需要使用normalize-space函数来删除前导空格并将每个其他空格实例替换为单个空格字符,使结果更像$ 1 . 23
现在,要删除开头的$字符,我建议使用substring-after函数,因此无论您是否使用上述的normalize-space函数都不会影响,像这样:substring-after(normalize-space(string(//span[@class='price'])), '$') 现在值得注意的是,substring-after(和normalize-space)将隐式调用string函数,因此您可以安全地省略这个函数,只需使用substring-after(normalize-space(//span[@class='price']), '$ ')。在这个例子中,我已经将substring-after的第二个参数更改为$,以便去除$后面的空格。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接