2014-05-12 30 views
0

我是一种新的ruby,我试图用HTML格式打印使用Nokogiri HTML builder的数组内容。如何打印数组的HTML格式内容Nokogiri builder

请有人指点我方向。

在此先感谢。

我到目前为止的代码是:

#!/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的红宝石 需要 '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> 

感谢您的帮助迄今

月2日更新:

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

您好再次,

我能得到所需的输出。我只想在标题前添加一些空的td,并且在td中包含colspan和类 ,但我无法正确添加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 

感谢您的帮助。

回答

0

b.each {|x| p v}需要为b.each {|v| p v}

,但是这不会给你的HTML,尝试对你的帮助这个

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

您好antpaw,谢谢。它正在处理您的建议,只有一些问题才能正确打印输出。请在“更新:”下方再次看到我的问题,我已更新它。谢谢 – Zurix

+0

你好,再次,也许你可以再次帮助我。请参阅我的问题,请在第二次更新下面。 Regards – Zurix

+0

你好,对于任何可能有同样问题的人,我找到了我最后一个问题的方法。我已经这样做了。 #doc.td(:colspan =>“3”,:class =>“MyClass”){doc.text(“Some text”)}#。感谢所有的帮助:) – Zurix