Я некий новый для рубинов, и я пытаюсь напечатать в формате 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
Спасибо еще раз за помощь.
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)}