2016-01-11 133 views
0

我有一些HTML,像这样:设置属性然后返回结果为一个字符串

html = "<h1>Title One</h1>\n\n<p>blah blah</p>\n\n<h1>Title Two</h1>\n\n<p>blah blah</p>\n" 

我需要给一个id属性给每个h1元素,其中id的值是文本在h1,然后返回整个事情作为一个字符串再次,所以结果是这样的:

"<h1 id="title-one">Title One</h1>\n\n<p>blah blah</p>\n\n<h1 id="title-two">Title Two</h1>\n\n<p>blah blah</p>\n" 

我已经尝试了很多不同的东西,我已经能够设置的属性,但不转它回到一个字符串。

基本上,我想要做这样的事情,但显然这并不工作:

new_html = Nokogiri::HTML.parse(html).xpath('//body').children do |el| 
    if el.name == 'h1' 
    id = el.children.text.parameterize 
    el.set_attribute('id', id) 
    end 
end 
new_html.to_s 

任何想法?

回答

2

你正在制作太多太难了。考虑一下:

require 'nokogiri' 

html = "<h1>Title One</h1>\n\n<p>blah blah</p>\n\n<h1>Title Two</h1>\n\n<p>blah blah</p>\n" 
doc = Nokogiri::HTML::DocumentFragment.parse(html) 

doc.search('h1').each do |h1| 
    h1['id'] = h1.text.tr(' ', '-') 
end 

puts doc.to_html 

# >> <h1 id="Title-One">Title One</h1> 
# >> 
# >> <p>blah blah</p> 
# >> 
# >> <h1 id="Title-Two">Title Two</h1> 
# >> 
# >> <p>blah blah</p> 

其余的如何使ID值看起来是你想要的是留给你弄清楚。

我已经能够设置属性,但不能把它变回字符串。

HTML和字符串有什么区别? HTML 的一个字符串,所以使用to_html

相关问题