2012-01-11 24 views
5

से कैसे हटाएं मेरे पास एक ऑब्जेक्ट है जो has_many बाल ऑब्जेक्ट्स जिन्हें xml के रूप में प्रस्तुत किया जाना चाहिए। ये कोई समस्या नहीं है। मेरी समस्या यह है कि मैं Hash बनाता हूं जिसमें इस डेटा को पार्सर की आवश्यकता होती है। लेकिन atomaticly<hash></hash> को प्रारूप.एक्सएमएल

<hash> 
    <objects type="array"> 
     <object> 
      ... 
      ... 
      ... 
     </object> 
    </objects> 
</hash> 

मैं type="array" से छुटकारा पाने की जरूरत है और <hash> मैं यह कैसे संभाल कर सकते हैं के साथ पूरी फ़ाइल encloses रेल? मुझे प्रलेखन पर कुछ भी नहीं मिला।

+0

आप की कोशिश की है 'to_xml' विधि:

यहाँ एक विधि है जो (config/initializers/rootless_xml.rb में जोड़ें) है? http://stackoverflow.com/questions/1739905/how-do-i-convert-a-ruby-hash-to-xml – jibiel

+1

ऐसा लगता है कि यह वास्तव में आपका मामला है http://stackoverflow.com/questions/6241911/rails -rendering-xml-add-hash-tag – jibiel

+0

धन्यवाद, मैंने एक हिस्सा किया जो मैंने बाकी को अपने => ': skip_types => true' – davidb

उत्तर

1
render :xml => @objects.to_xml(:root => :root_name, :skip_types => true) 
+0

अब मेरे पास मेरे आउटपुट xml में टैग है ... जैसा कि मैंने इसे पढ़ा है, सवाल का इरादा नहीं है। "सरणी" चली गई है, लेकिन का नाम बदल दिया गया है .. यह अभी भी वैसे ही है। – baash05

+0

ठीक दिखता है :? [1,2,3] .to_xml (: root =>: ऑब्जेक्ट्स,: skip_types => true) => " \ N \ N \ N \ N \ N \ n " – Anno2001

7

मुझे एक ही समस्या थी;

<?xml version="1.0" encoding="UTF-8"?> 
<Contacts> 
    <Contact type="array"> 
    </Contact> 
</Contacts> 

मैं इस उपयोग कर रहा था:

यह मेरा एक्सएमएल है

entries.to_xml 

एक्सएमएल में हैश डेटा कन्वर्ट करने के लिए है, लेकिन इस <hash></hash>

तो मैं संशोधित में एंट्री 'डेटा लपेटता :

entries.to_xml(root: "Contacts") 

लेकिन है कि अभी भी

<Contacts> 
<Contacts> 
    <Contact type="array"> 
    <Contact> 
    <Name></Name> 
    <Email></Email> 
    <Phone></Phone> 
    </Contact> 
    </Contact> 
</Contacts> 
</Contacts> 

करने के लिए 'संपर्क' मेरी एक्सएमएल कोड को संशोधित परिवर्तित एक्सएमएल लिपटे तो यह एक अतिरिक्त जड़ है कि मैं वहाँ wan't नहीं कहते हैं।

अब यह है कि क्या मेरे लिए काम किया का हल है:

entries["Contacts"].to_xml(root: "Contacts") 

कि <hash></hash> या किसी भी अतिरिक्त जड़ से बचा जाता है शामिल किया जाना है। चीयर्स !!

0

वास्तविक दुनिया में वास्तविक विकास करने के कई कारण हैं, आपको XML के टुकड़ों की आवश्यकता क्यों हो सकती है, भले ही आप पूरी तरह से जानते हों कि वास्तविक XML spec एक रूट को रूट करता है

हालांकि, ActiveSupport के Hash#to_xml इसका समर्थन नहीं करता है।

class Hash 
    def to_rootless_xml(options = {}) 
    require 'active_support/builder' unless defined?(Builder) 

    options = options.dup 
    options[:indent] ||= 2 
    options[:root] ||= 'hash' 
    options[:builder] ||= Builder::XmlMarkup.new(indent: options[:indent]) 

    builder = options[:builder] 
    builder.instruct! unless options.delete(:skip_instruct) 


    each { |key, value| ActiveSupport::XmlMini.to_tag(key, value, options) } 
    yield builder if block_given? 
    builder.target! 
    end 
end 
संबंधित मुद्दे