2010-01-19 26 views
2

有沒有辦法編輯nokogiri元素的文本?我有一個包含列表元素的nokogiri元素(<li>),我想從文本中刪除一些字符,同時保留<li> html。具體來說,我想刪除文本中的前導「:」字符,如果它存在。它看起來不像nokogiri元素的text =方法,但我只是想確定。在Nokogiri元素中編輯文本或使用正則表達式

也許我將不得不使用正則表達式嗎?如果是的話,如果它看起來像這樣:

<li>: blah blah blah</li> 

p.s.我正在使用紅寶石。

回答

5
#!/usr/bin/ruby1.8 

require 'rubygems' 
require 'nokogiri' 

html = <<EOS 
    <ul> 
    <li>: blah blah blah</li> 
    <li>: foo bar baz</li> 
    </ul> 
EOS 

doc = Nokogiri::HTML.parse(html) 
for li in doc.xpath('//li/text()') 
    li.content = li.content.gsub(/^: */, '') 
end 
puts doc.to_html 

# => <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
# => <html><body><ul> 
# => <li>blah blah blah</li> 
# =>  <li>foo bar baz</li> 
# => </ul></body></html> 
+0

不應該是'li.content = li.content.gsub(/ ^:* /,'')'? – 2010-01-19 20:26:49

+0

@丹尼爾,你抓到我了。這段代碼在發佈之前經過了一些迭代。然後我注意到前一次迭代遺留的變量名,並決定只編輯好名稱的答案。但我錯過了一個。 – 2010-01-19 21:26:27

+0

如何保留列表元素中的鏈接? – TenJack 2010-01-19 22:50:26