我需要用我要创建的新HTML替换文档中的节点。
我必须替换的节点的类是:
Nokogiri::XML::Node
我使用Nokogiri Builder创建片段:
new_node = Nokogiri::XML::Builder.new do |xml|
xml.table('border' => '1', 'cellpadding' => '1', 'cellspacing' => '1') {
xml.thead {
xml.tr {
battery_test[0..4].each do |head|
xml.th_ head["inputValue"]
end
}
}
xml.tbody {
battery_test.drop(5).each_slice(5) do |row|
xml.tr {
row.each do |item|
xml.td_ item["inputValue"]
end
}
end
}
}
end
但是new_node
的类别是Nokogiri::XML::Builder
。
如何用我用构建器创建的片段替换Nokogiri :: XML :: Node?
您不必使用Builder来创建节点。 Nokogiri允许使用几种方法来定义它们。您的问题未得到很好的回答,因为它缺少基本信息,但这可以帮助您入门:
require 'nokogiri'
doc = Nokogiri::HTML(<<EOT)
<html>
<head></head>
<body>
</body>
</html>
EOT
puts doc.to_html
# >> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
# >> <html>
# >> <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head>
# >> <body>
# >> </body>
# >> </html>
我可以使用包含HTML的字符串添加表:
body = doc.at('body')
body.inner_html = "<table><tbody><tr><td>foo</td><td>bar</td></tr></tbody></table>"
puts doc.to_html
# >> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
# >> <html>
# >> <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head>
# >> <body><table><tbody><tr>
# >> <td>foo</td>
# >> <td>bar</td>
# >> </tr></tbody></table></body>
# >> </html>
修改字符串生成以包含所需的HTML,让Nokogiri承担繁重的工作,您就完成了。它更易于阅读和维护。
inner_html=
定义为:
inner_html=
[inner_html=(node_or_tags)
表示您可以传递使用Builder创建的,从DOM中其他位置截取的节点或包含标记的字符串。
类似地:
node_or_tags