2009-12-22 12 views
15

मैं नोकोगिरी का उपयोग कर एक एक्सएमएल दस्तावेज़ बनाने की कोशिश कर रहा हूं। उनमें से कुछ तत्वों में हाइफ़न होता है।मैं तत्व नाम में एक हाइफ़न के साथ नोकोगिरी :: एक्सएमएल :: बिल्डर का उपयोग करके एक्सएमएल कैसे बना सकता हूं?

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

puts builder.to_xml 

कौन सा पैदा करता है:

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

हालांकि, जब मैं कोशिश:

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

मैं: यहाँ एक उदाहरण है

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

अब मुझे पता है इस वजह से है हाइफ़न का अर्थके रूप में किया जा रहा है।

मुझे यह कैसे करना चाहिए?

उत्तर

40

ये रहा:

require 'nokogiri' 

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

puts b.to_xml 
+4

जहां करता हैलो में आते हैं ? xml.send (: "foo-bar", "हैलो")? – Angela

+1

इसे आधिकारिक नोकोगिरी दस्तावेज में कहां से दस्तावेज किया गया है? क्या आप एक लिंक साझा कर सकते हैं? – yegor256

+1

@ yegor256 यहां आप जाते हैं: http://www.rubydoc.info/github/sparklemotion/nokogiri/Nokogiri/XML/Builder – bonh

3

हारून पैटरसन के जवाब सही है और तत्व किसी भी चरित्र है कि अन्यथा रूबी पार्सर द्वारा व्याख्या की जा सकती युक्त नाम के लिए काम करेंगे।

एंजेला के प्रश्न का उत्तर देना:

require 'rubygems' 
require 'nokogiri' 

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

puts b.to_xml 
26

बार्ट Vandendriessche का जवाब काम करता है लेकिन वहाँ एक सरल समाधान है अगर आप केवल के भीतर एक पाठ क्षेत्र हैं: इस तरह से आप कुछ इस तरह कर सकते हैं बनाया गया एक तत्व के अंदर टेक्स्ट रखने का विकल्प तत्व।

require 'nokogiri' 

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

puts b.to_xml 

उत्पन्न करता है:

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

आप उन्हें तब नेस्ट होने की जरूरत है, तो आप एक ब्लॉक

require 'nokogiri' 

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

puts b.to_xml 

उत्पन्न करता है पारित कर सकते हैं:

<?xml version="1.0"?> 
<foo-bar> 
    <bar-foo>hello</bar-foo> 
</foo-bar> 
संबंधित मुद्दे