2011-08-13 11 views
1

我有一個RSS文檔,有幾個標籤,我們說名爲<foo><bar>,我想要替換/按摩內容。這樣做最有效的方法是什麼?我是否解析整個Feed並將內容替換爲內聯?如果是這樣,那麼如果我想爲上面的兩個兄弟節點做這個塊,那麼該塊如何看起來像?使用Nokogiri替換一些標籤的內容的有效方法

當我瀏覽內容時,是否需要按順序解析文檔並創建新文檔?

doc = Nokogiri::XML(open("http://example.com/rss.xml"))

什麼是遍歷文檔,並從該點修改<foo><bar>內容的最佳方式:

該文件是越來越喜歡的東西創造出來的?

+0

你說上面的「兄弟節點」,但你不解釋你的意思。如果他們是兄弟姐妹,他們只能匹配嗎?他們會不會獨立,然後會發生什麼? – Phrogz

回答

3

您可以直接在內存中編輯XML文檔。如果你正在尋找簡單的方法,你可以使用CSS選擇器。下面的代碼將改變foobar元素無論身在何處,他們所在的文件中的內容:

doc = Nokogiri::XML(open("http://example.com/rss.xml")) 
for element in doc.css('foo, bar') 
    element.content = "something" 
end 

您也可以使用多個CSS選擇器或XPath查詢,看看引入nokogiri文檔:

2
xml = "<r> 
    <foo>Hello<b>World</b></foo> 
    <x>It's <bar>Nice</bar> to see you.</x> 
    <foo>Here's another</foo> 
    <y>Don't touch me.</y> 
</r>" 

require 'nokogiri' 
doc = Nokogiri::XML(xml) 

doc.search('foo,bar').each do |node| 
    node.inner_html = "I am #{node.name} and I used to say #{node.text.inspect}" 
end 

puts doc 
#=> <?xml version="1.0"?> 
#=> <r> 
#=> <foo>I am foo and I used to say "HelloWorld"</foo> 
#=> <x>It's <bar>I am bar and I used to say "Nice"</bar> to see you.</x> 
#=> <foo>I am foo and I used to say "Here's another"</foo> 
#=> <y>Don't touch me.</y> 
#=> </r> 

您還可以使用doc.xpath('//foo|//bar')找到所有在任何深度的foobar元素。 (雖然CSS語法更短,功能也更強大)。

將來,您應該提供您正在解析的XML的實際樣本,以及您希望應用的那種轉換的實際樣本。

相關問題