我是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;。你可以帮帮我吗? 谢谢!
答案 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
到$
,以便$
之后的空格也将被删除。