如何打印阵列Nokogiri构建器的HTML格式内容

时间:2014-05-12 21:04:31

标签: html ruby nokogiri

我是ruby的新手,我正在尝试使用Nokogiri HTML构建器以HTML格式打印数组内容。

请有人指点我的方向。

提前致谢。

我到目前为止的代码是:

#!/usr/bin/env ruby
require 'rubygems'
require 'nokogiri'

a = ["Header1","Header2","Header3"]
b = [["x","y","z"],["w","q","t"]]

builder = Nokogiri::HTML::Builder.new do |doc|
doc.html {
    doc.body{
            doc.table { 
                doc.tr { 
                    doc.td { 
                        a.each { |v| p v }
                        b.each {|x| p v}
                    }
                }
            }
        }
    }
end
puts builder.to_html

我正在寻找的输出是:

<html>
<body>
<table>
<tr>
    <td>Header1</td>
    <td>Header2</td>
    <td>Header3</td>
</tr>
<tr>
    <td>x</td>
    <td>y</td>
    <td>z</td>
</tr>
<tr>
    <td>w</td>
    <td>q</td>
    <td>t</td>
</tr>
</table>
</body>
</html>

我收到了几个错误:

    C:\AWK\XMLs>ruby Nokogiri_HTMLBuilder.rb
"Header1"
"Header2"
"Header3"
Nokogiri_HTMLBuilder.rb:17:in `block (7 levels) in <main>': undefined local variable or method `v' for main:Object (NameError)
        from Nokogiri_HTMLBuilder.rb:17:in `each'
        from Nokogiri_HTMLBuilder.rb:17:in `block (6 levels) in <main>'
        from C:/Ruby200/lib/ruby/gems/2.0.0/gems/nokogiri-1.6.2.rc2-x86-mingw32/lib/nokogiri/xml/builder.rb:391:in `call'
        from C:/Ruby200/lib/ruby/gems/2.0.0/gems/nokogiri-1.6.2.rc2-x86-mingw32/lib/nokogiri/xml/builder.rb:391:in `insert'
        from C:/Ruby200/lib/ruby/gems/2.0.0/gems/nokogiri-1.6.2.rc2-x86-mingw32/lib/nokogiri/xml/builder.rb:375:in `method_missing'

更新数据:

###################################################################

谢谢antpaw的帮助。我的建议越来越好了。就像你说的那样!!

我现在只有问题以所需的方式打印输出。

到目前为止我有这个代码:    #!/ usr / bin / env ruby     要求'rubygems'     要求'nokogiri'

a = ["Header1","Header2","Header3"]
b = [["x","y","z"],["w","q","t"]]

builder = Nokogiri::HTML::Builder.new do |doc|
doc.html {
    doc.body{
            doc.table { 
                doc.tr { 
                    a.each { |v| doc.td { doc.text(v) } }
                }
                doc.tr { 
                    b.each { |v| v.each { |z| doc.td { doc.text(z) } } }
                }
            }
        }
    }
end
puts builder.to_html

我收到了这个输出(第2行和第3行合并为一个,应该分开):

<html>
  <body>
    <table>
      <tr>
        <td>Header1</td>
        <td>Header2</td>
        <td>Header3</td>
      </tr>
      <tr>
        <td>x</td>
        <td>y</td>
        <td>z</td>
        <td>w</td>
        <td>q</td>
        <td>t</td>
      </tr>
    </table>
  </body>
</html>

和我正在寻找的输出是:

<html>
<body>
<table>
<tr>
    <td>Header1</td>
    <td>Header2</td>
    <td>Header3</td>
</tr>
<tr>
    <td>x</td>
    <td>y</td>
    <td>z</td>
</tr>
<tr>
    <td>w</td>
    <td>q</td>
    <td>t</td>
</tr>
</table>
</body>
</html> 

感谢目前为止提供的帮助

第二次更新:

#------------------------------------------------------------------#

再次问好,

我能够获得所需的输出。我只想在Headers和包含colspan和类的td之前添加一些空的td 但我没有正确添加colspan和类。请你帮帮我。

这是我到目前为止的代码,它的工作除了注释行'。

对于注释行,我想获得此输出:

<td colspan="3" class="MyClass">Some text</td>

我到目前为止的代码:

builder = Nokogiri::HTML::Builder.new do |doc|
doc.html {
    doc.body{
            doc.table { 
                doc.tr { 
                    doc.td {}
                    doc.td {}

                    #doc.td {colspan "3"; doc.text("Org")} #Here I want to add a colspan and class

                    a.each { |v| doc.td { doc.text(v) } }
                }   
                b.size.times do |j|
                    doc.tr { 
                        b.inject(0) {|m,l| [m, l.size].max}.times do |i|
                            doc.td {
                                doc.text("#{b[j][i]}")
                            }
                        end 
                    }
                end

            }
        }
    }
end
puts builder.to_html

再次感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

b.each {|x| p v}必须为b.each {|v| p v}

但是这不会给你html,试试这个

             a.each {|v| doc.text(v) }
             b.each {|v| doc.text(v)}