2011-02-24 93 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