Как напечатать HTML-формат содержимого массивов Nokogiri builder

0

Я некий новый для рубинов, и я пытаюсь напечатать в формате HTML содержимое массивов с помощью Nokogiri HTML 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'

Обновленные данные:

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

Спасибо, спасибо, за вашу помощь. Я пойду лучше с вашим предложением. Как ты сказал!

У меня только сейчас есть проблемы с печатью по желанию вывода.

У меня есть этот код: #!/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> 

Спасибо за помощь до сих пор

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

Спасибо еще раз за помощь.

Теги:
nokogiri

1 ответ

0

b.each {|x| pv} b.each {|x| pv} должно быть b.each {|v| pv} b.each {|v| pv}

но это не даст вам html, попробуйте это

             a.each {|v| doc.text(v) }
             b.each {|v| doc.text(v)}
  • 0
    Привет antpaw, спасибо за вашу помощь. Это работает с вашим предложением, только некоторые проблемы, чтобы правильно распечатать вывод. Пожалуйста, можете ли вы увидеть мой вопрос снова ниже "Обновлено:", я обновил его. Спасибо
  • 0
    Здравствуйте еще раз, может быть, вы можете помочь мне снова. Пожалуйста, смотрите мой вопрос, ниже 2-го обновления, пожалуйста. С уважением
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню