2
解析請看下面的HTML:使用XPath
<div class='data'>
<div class='user_name'>Lankesh</div>
<div class='user_details'>
<div class='country'>Srilanka</div>
<div class='age'>9</div>
</div>
<div class='user_name'>Bob</div>
<div class='user_details'>
<div class='country'>US</div>
<div class='age'>54</div>
</div>
<div class='user_name'>Deiter</div>
<div class='user_details'>
<div class='country'>Germany</div>
<div class='age'>34</div>
</div>
<div class='user_name'>Yakob</div>
<div class='user_details'>
<div class='country'>Syria</div>
<div class='age'>90</div>
</div>
<div class='user_name'>Qureshi</div>
<div class='user_details'>
<div class='country'>Afgan</div>
<div class='age'>56</div>
</div>
<div class='user_name'>Smith George</div>
<div class='user_details'>
<div class='country'>India</div>
<div class='age'>23</div>
</div>
</div>
而下面的Ruby代碼:
require 'nokogiri'
sample_html = File.open("r.htm", "r").read
n = Nokogiri::HTML::parse sample_html
xpaths = {}
xpaths[:name] = "//div[@class = 'user_name']/text()"
xpaths[:country] = "//div[@class = 'country']/text()"
xpaths[:age] = "//div[@class = 'age']/text()"
full_path = xpaths.values.join(" | ")
n.xpath(full_path).each do |i|
puts i
end
這工作來提取數據,可是我怎麼能塊(姓名,年齡和國家)等等我可以更容易地將解析的數據提取到結構中。
- 由於name位於user_details塊之外,因此我無法編寫如下查詢:
//div[@class = 'user_details']
並提取每個屬性。 - 我知道我可以將數組分成3組;但我正在尋找基於xpath的解決方案,因爲我的實際需求具有不同數量的子屬性。
- 愚蠢,但:無論如何以某種方式注入字符提取文本,在解析?
任何想法?
是的,你有正確的猜測,我沒有控制HTML。我理解拉鍊。但沒有辦法使用XPath完成此操作(也許我正在對XPath進行映像) –
我不這麼認爲,主要是因爲XPath返回了一個平坦的結果列表,並且因爲您的來源未分組也不會結果。您是否有任何理由只希望它在XPath中完成?你說這是因爲user_details有不同數量的屬性,但我的解決方案解決它的問題時,解析爲數據結構,這正是你想要的:)? –
你是對的,但不知何故,它被實際解析的困惑所困惑,那就是爲什麼我要進一步尋找。你回答肯定是對的。但是,只是尋找我發佈的另一個問題;多數民衆贊成我真的想要幫助,試圖瞭解XPath在這。 –