2009-09-18 43 views
0

我有一個文檔,想要提取一些元素,這些元素是父元素的直接後代,但省略了其他元素。 問題是我沒有按照它們在文檔中出現的順序獲取元素。 原因可能實際上是我使用的CSS選擇器是錯誤的......按照它們在文檔中出現的順序獲取元素

require 'rubygems' 
require 'nokogiri' 
require 'open-uri' 

html = <<END 
    <content> 
    <p>Lorem</p> 
    <div> 
     FOO 
     <p>BAR</p> 
    </div> 
    <h1>Ipsum</h1> 
    <p>Dolor</p> 
    <div> 
     BAR 
     <h2>FOO</h2> 
    </div> 
    <h2>Sit</h2> 
    <p>Amet</p> 
    </html> 
END 

Nokogiri::HTML(html).css('content > p, content > h1, content > h2').inner_html # "<p>Lorem</p><p>Dolor</p><p>Amet</p><h1>Ipsum</h1><h2>Sit</h2>" 

我要的是

<p>Lorem</p><h1>Ipsum</h1><p>Dolor</p><h2>Sit</h2><p>Amet</p> 

回答

1

嘗試使用這個XPath:

//content/p|//content/h1|//content/h2 
+0

完美,謝謝! – 2009-09-18 21:50:28

0

你想的不同元素中列出它們在路上文檔,但正如您所看到的,您可以根據CSS選擇器順序獲取元素。

爲了解決這個問題,你必須給元素添加一個類屬性,所以你選擇所有具有該類的元素,而不是隻使用一個CSS選擇器,這意味着元素將按正確的順序排列。

+0

謝謝您的回答!不幸的是,我只能閱讀源html,所以我不能添加任何屬性... – 2009-09-18 21:52:19

相關問題