2011-08-03 85 views
1

一個文檔所有的父母我有一個這樣的文件:提取物與引入nokogiri

<DL><a lot of tags>...<H3>Entry 1</H3><a lot of tags>...</DL> 
<DL><a lot of tags>...<H3>Entry 2</H3><a lot of tags>... 
    <DL><a lot of tags>...<H3>Entry 21</H3><a lot of tags>... 
     <DL><a lot of tags>...<H3>Entry 211</H3><a lot of tags>...</DL> 
    </DL> 
</DL> 
<DL><a lot of tags>...><H3>Entry 3</H3><a lot of tags>...</DL> 

我想找到所有'進入,很容易與後續代碼:

@doc=Nokogiri::HTML(@file) 
@doc.css('DL>h3').each do |node| puts node.text end 

怎麼能我提取H3父母的任何條目列表? 我想有一個方法爲「父」返回的關係,即: entry211.parent ==> /輸入2 /輸入21/

回答

1

如果你只是希望每個h3元素

的父元素
@doc.css('DL>h3').collect(&:parent) 

應該這樣做。

但是,看起來您可能需要所有h3元素爲dl元素的子元素,該元素是h3元素的祖先。如果我明白你的結構正確,你應該能夠做到

@doc.css('dl>h3').collect { |h3| h3.ancestors('dl').css('h3') } 

這給你一個Array包含與h3元素在每個h3元素的祖先dl元素的後代的Array。困惑?我確信我:)

例如,使用您的樣本HTML結果的記錄211 h3

@doc.css('dl>h3').collect { |h3| h3.ancestors('dl').css('h3') }[3].collect(&:text) 
#=> ["Entry 211", "Entry 21", "Entry 2"] 

這是足夠接近你想要什麼?