【问题标题】:Get Xpath to the parts of the node获取节点部分的 Xpath
【发布时间】:2015-12-16 20:04:53
【问题描述】:

我是 XPath 的新手,如果这对你来说是一个愚蠢的问题,我很抱歉。 我只需要从第一个跨度 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是

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

但它给了我一个包含每个元素的数组 [$][1][.][23] 我只需要没有“$”的 1.23。你可以帮帮我吗? 谢谢!

【问题讨论】:

  • 你有没有尝试过?也许喜欢使用谷歌?
  • 不!什么是谷歌?!
  • 您的示例中的 1、4 和 7 是什么?它们在 xml 标签之外。这也是完整的xml吗?它没有根元素。
  • 你可以试试substring-after(//span[@class='price'], '$'),但它会在数字之间包含空格,因为原始文档中有空格
  • erik, 1, 4, 7 - 这些是价格的美元金额。此示例中有 3 个价格,分别为 1.23 美元、4.56 美元和 7.89 美元。所以我只需要没有“$”的第一个。我没有把根放在我提到的 "//span[@class='price'])[1]" 工作正常,但它给出了数组。

标签: arrays xml xpath


【解决方案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 函数都没有关系,例如:@987654333 @

现在,值得注意的是substring-after(和normalize-space)将隐式调用string 函数,因此您可以放心地忽略它而只使用substring-after(normalize-space(//span[@class='price']), '$ ')。在这个例子中,我把substring-after的第二个参数改成了$,这样$后面的空格也会被去掉。

【讨论】:

    猜你喜欢
    • 2013-07-08
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 2015-03-30
    • 2015-10-29
    • 2023-03-27
    • 2012-09-17
    • 1970-01-01
    相关资源
    最近更新 更多