如何从Nokogiri :: XML :: Builder创建Nokogiri :: XML :: Node

问题描述 投票:-1回答:1

我需要用我要创建的新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?

ruby-on-rails ruby nokogiri
1个回答
0
投票

您不必使用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
© www.soinside.com 2019 - 2024. All rights reserved.