2009-12-22 26 views
15

Nokogiri'yi kullanarak bir XML belgesi oluşturmaya çalışıyorum. Bazı elemanların içlerinde tire vardır.Öğe adında kısa çizgi ile Nokogiri :: XML :: Builder kullanarak XML nasıl oluşturabilirim?

syntax error, unexpected tSTRING_BEG, expecting kDO or '{' or '(' 
    xml.foo-bar "hello" 

Şimdi bu çünkü farkında:

require "nokogiri" 
builder = Nokogiri::XML::Builder.new do |xml| 
    xml.foo_bar "hello" 
end 

puts builder.to_xml 

üretir:

<?xml version="1.0"?> 
<foo_bar>hello</foo_bar> 

Ancak, ben çalıştığınızda:

builder = Nokogiri::XML::Builder.new do |xml| 
    xml.foo-bar "hello" 
end 

alıyorum İşte bir örnek tire,olarak yorumlanıyor.

Bunu nasıl yapmalıyım? İşte

cevap

40

gitmek:

require 'nokogiri' 

b = Nokogiri::XML::Builder.new do |xml| 
    xml.send(:"fooo-bar", "hello") 
end 

puts b.to_xml 
+4

merhaba de geliyor:

<?xml version="1.0"?> <foo-bar>hello</foo-bar> 

Eğer

require 'nokogiri' b = Nokogiri::XML::Builder.new do |xml| xml.send(:'foo-bar') { xml.send(:'bar-foo', 'hello') } end puts b.to_xml 

üretir bir blok geçebilir bunları daha sonra iç içe gerekiyorsa ? xml.send (: "foo-bar", "merhaba")? – Angela

+1

Resmi Nokogiri belgelerinde nerede belgelenmiştir? bir bağlantı paylaşır mısınız lütfen? – yegor256

+1

@ yegor256 işte buradasınız: http://www.rubydoc.info/github/sparklemotion/nokogiri/Nokogiri/XML/Builder – bonh

3

Aaron Patterson'un cevabın doğru olup aksi Yakut ayrıştırıcı tarafından yorumlanır olabilecek karakterini içeren eleman isimleri için çalışacaktır.

Angela'nın sorusunu yanıtlayan:

require 'rubygems' 
require 'nokogiri' 

b = Nokogiri::XML::Builder.new do |xml| 
    xml.send(:'foo.bar') { 
    xml.text 'hello' 
    } 
end 

puts b.to_xml 
26

Bart VANDENDRIESSCHE cevabı eserlerini ama sadece içinde bir metin alanı istiyorsanız daha basit bir çözüm vardır: Böyle bir şey yapabiliriz bu şekilde oluşturulan bir elemanın içindeki metni yerleştirmek için öğesi.

require 'nokogiri' 

b = Nokogiri::XML::Builder.new do |xml| 
    xml.send(:"foo-bar", 'hello') 
end 

puts b.to_xml 

oluşturur:

<?xml version="1.0"?> 
<foo-bar> 
    <bar-foo>hello</bar-foo> 
</foo-bar> 
İlgili konular