2012-12-27 10 views
5

पर एक्सएमएल स्ट्रिंग को जोड़ने के लिए मेरे पास एक अलग स्रोत से एक स्ट्रिंग में मौजूदा नोकोगिरी बिल्डर और कुछ एक्सएमएल नोड्स हैं। मैं अपने निर्माता को यह स्ट्रिंग कैसे जोड़ सकता हूं?नोकोगिरी बिल्डर

str = "<options><cc>true</cc></options>" 
xml = Nokogiri::XML::Builder.new do |q| 
    q.query do |f| 
    f.name "awesome" 
    f.filter str 
    end 
end 

इस तरह कुछ में str निकल जाता है:

xml.to_xml 
=> "<?xml version=\"1.0\"?>\n<query>\n <name>awesome</name>\n <filter>&lt;options&gt;&lt;cc&gt;true&lt;/cc&gt;&lt;/options&gt;</filter>\n</query>\n" 

मैं बिल्डरों घोंसले और < < ऑपरेटर का उपयोग सहित कई, कई इसी तरह की बातों ने पाया है, लेकिन कुछ भी एक पूर्ण xml नोड पेड़ सम्मिलित करने के लिए काम करता है एक निर्माता ब्लॉक में। मैं उस स्ट्रिंग को वास्तविक नोड्स में कैसे बना सकता हूं?

उत्तर

10

<< का उपयोग करके आपको क्या समस्याएं मिलीं? यह मेरे लिए काम करता है:

xml = Nokogiri::XML::Builder.new do |q| 
    q.query do |f| 
    f.name "awesome" 
    f << str 
    end 
end 

और निजी insert पद्धति का उपयोग करके बचा जाता है।

0

और, हमेशा की तरह, मैं जल्द ही पोस्टिंग के बाद जवाब मिला ...

xml = Nokogiri::XML::Builder.new do |q| 
    q.query do |f| 
    f.name "awesome" 
    f.__send__ :insert, Nokogiri::XML::DocumentFragment.parse(str) 
    end 
end.to_xml 

आप देता है

=> "<?xml version=\"1.0\"?>\n<query>\n <name>awesome</name>\n <options>\n <cc>true</cc>\n </options>\n</query>\n" 

संपादित करें: इस तरह से मेरे लिए काम किया जब < < किसी अज्ञात कारण के लिए विफल रहा है । हालांकि, जैसा कि अन्य ने इंगित किया है कि यह सीधे पहुंचने के द्वारा काम करता है: सम्मिलित विधि जिसे संरक्षित करने का इरादा था। इसे "खराब अभ्यास" और अंतिम उपाय दोनों पर विचार करें।

+0

यह कठिन तरीका कर रहा है। उत्तर @matt दिया गया जवाब देखें, जो कच्चे एक्सएमएल को जोड़ने के लिए ['<<'] (http://nokogiri.org/Nokogiri/XML/Builder.html#method-i-3C-3C) ऑपरेटर का उपयोग करता है। –

+0

एक अपडेट nokogiri मणि और बाद में एक बंडल और @matt वाक्यविन्यास महान काम करता है। मुझे नहीं पता कि क्या कहना है क्योंकि मैंने << पहले कई तरीकों का उपयोग करने की कोशिश की! – genkilabs

+0

रूबी दुनिया में अपने रत्नों को अद्यतन रखने के लिए यह एक अच्छा विचार है। जहां हम अन्य भाषाओं में खून बहने वाले किनारे के पीछे रहेंगे, अक्सर रूबी के साथ सुंदर रहना अच्छा होता है। –

संबंधित मुद्दे