2011-02-24 118 views
1

我需要从以下代码获得值9,70,但无法这样做。数字的逗号是数字的一部分而不是分隔符,因此整个数字在一个字符串中是必需的。 id="cheapest wine"是唯一的,但它不断返回错误。使用xpath,ruby获取值

<tr class="chartTableHeader"> 
<tr class="chartTableRow"> 
    <td class="chartTableColFirst" style="height: 19px"> 
    <td class="chartTableCol" style="height: 19px"> 
    <td class="chartTableCol" style="height: 19px"> 
    <span id="cheapest wine">9,70</span> 
    </td> 
    <td class="chartTableCol" style="height: 19px"> 
    <td class="chartTableCol" style="height: 19px"> 
    <td class="chartTableCol" style="height: 19px"> 
+0

您的代码没有显示,请修正的问题。 – johusman 2011-02-24 12:58:33

回答

1

使用引入nokogiri,并假设你的HTML格式正确,就可以得到价值如下:

require 'nokogiri' 

xml = <<-EOF 
<root> 
<span id="cheapest wine">9,70</span> 
</root> 
EOF 

doc = Nokogiri::XML(xml) 
doc.xpath('//span[@id="cheapest wine"]').map do |add| 
    puts add.inner_text 
end 

这里的关键是XPath查询://span[@id="cheapest wine"]其搜索的span节点,其id"cheapest wine"(作为一个ID,应该只有一个)。

+1

'// span [@ id ='最便宜的葡萄酒']'就够了。然后使用正确的DOM方法获取**字符串值**:在**混合内容**数据模型中选择文本节点这不是最好的想法......或者只是获取字符串值原子类型评估'string(//span [@ id ='cheapest wine'])'如果你的XPath引擎支持这个通用的XPath表达式。 – 2011-02-24 16:39:50

+0

@Alejandro:非常感谢这些精度,我已经修改了我的答案,以遵循您的建议。希望现在可以吗? – 2011-02-24 17:11:32

+0

+1正确答案。 – 2011-02-24 17:14:28

0

使用以下XPath表达式

number(
    translate(tr[@class='chartTableRow']/td/span[@id='cheapest wine'], 
      ',', 
      '.' 
      ) 
    ) 

其中从该XPath表达式评估的当前节点是在你的问题所示的XML片段的父。上述

的XPath表达式的计算结果为9.7