2008-11-20 9 views
8

से पायथन ऑब्जेक्ट प्रस्तुति बनाने के लिए मॉड्यूल मैं xml से पायथन ऑब्जेक्ट प्रस्तुति बनाने के लिए पाइथन मूल मॉड्यूल को संभालने में आसान खोज रहा हूं।मॉड्यूल xml

मुझे Google के माध्यम से कई मॉड्यूल मिले (उनमें से एक XMLObject है) लेकिन उन सभी को आजमाने की कोशिश नहीं करना चाहता था।

आपको ऐसा करने का सबसे अच्छा तरीका क्या है?

संपादित करें: मुझे यह उल्लेख करने में चूक गई कि मैं जिस XML को पढ़ना चाहता हूं वह मेरे द्वारा उत्पन्न नहीं होता है। यह एक मौजूदा XML फ़ाइल है जिसकी संरचना पर मेरा कोई नियंत्रण नहीं है।

+0

क्या आप बस किसी ऑब्जेक्ट को क्रमबद्ध करना चाहते हैं? या एक्सएमएल एक कठिन आवश्यकता है? –

+0

मुझे मौजूदा एक्सएमएल फाइलों को पढ़ने की जरूरत है - इसलिए एक्सएमएल एक कठिन आवश्यकता है – Martin

उत्तर

12

आप कहते हैं कि आप ऑब्जेक्ट प्रतिनिधित्व चाहते हैं, जिसका अर्थ है कि नोड्स ऑब्जेक्ट बन जाते हैं, और नोड के गुण और बच्चे ऑब्जेक्ट के गुणों (संभवतः कुछ स्कीमा के अनुसार) के रूप में दर्शाए जाते हैं। यही एक्सएमएल ऑब्जेक्ट करता है, मुझे विश्वास है।

कुछ ऐसे पैकेज हैं जिन्हें मैं जानता हूं। 4Suite में ऐसा करने के लिए कुछ टूल शामिल हैं, और मेरा मानना ​​है कि Amara विशेष रूप से यह लागू करता है (4 सूइट के शीर्ष पर बनाया गया)। आप lxml.objectify का भी उपयोग कर सकते हैं, जो अमारा और gnosis.xml.objectify से प्रेरित था।

बेशक एक तीसरा विकल्प है, एक्सएमएल का एक ठोस प्रतिनिधित्व (एलिमेंटट्री या एलएक्सएमएल का उपयोग करके) आप इसके चारों ओर अपना खुद का कस्टम मॉडल बना सकते हैं। lxml.html इसका एक उदाहरण है, कुछ एचटीएमएल-विशिष्ट कार्यक्षमता के साथ एलएक्सएमएल के बेस इंटरफ़ेस को विस्तारित करना।

+0

अपनी व्याख्या के साथ सहमत हैं। –

+0

अजगर और एलसीएमएल पायथन में लिखा गया है? मैं ऐसी छोटी समस्या को हल करने के लिए द्विआधारी स्थापित नहीं करना चाहता था। – Martin

3

मैंने सबसे आसान सुना है ElementTree, हालांकि मैं शायद ही कभी एक्सएमएल के साथ काम करता हूं और मैं अनुभव से कुछ भी नहीं कह सकता।

5

मैं xml.etree.ElementTree का सुझाव देता हूं, क्योंकि ज्यादातर अब यह stdlib में है। एक तेज़ कार्यान्वयन भी है, xml.etree.cElementTree भी उपलब्ध है।

तुम सच में प्रदर्शन की जरूरत है, मेरा सुझाव है

http://www.ibm.com/developerworks//xml/library/x-hiperfparse/

1

lxml पायथन अजगर वस्तु क्रमांकन के लिए अचार और cPickle मॉड्यूल है जाएगा। इन मॉड्यूल के दोनों क्रमानुसार करने कार्यक्षमता प्रदान/deserialize अजगर वस्तु पदानुक्रम के लिए/परिवर्तित करने के लिए एक बाइट धारा से: अचार(), unpickle() क्रमबद्धता के लिए:

निम्नलिखित समान इंटरफेस प्रदान करता है करने के लिए/एक्सएमएल

+0

मुझे खेद है .. मुझे यह उल्लेख करना याद आया कि एक्सएमएल जो मैं पढ़ना चाहता हूं वह मेरे द्वारा उत्पन्न नहीं होता है। यह एक मौजूदा XML फ़ाइल है जिसकी संरचना पर मेरा कोई नियंत्रण नहीं है। – Martin

1

मैं से पीईआरएक्सपी का उपयोग करें (और पसंद करें), जो एक्सएमएल दस्तावेज़ से निर्मित एक ट्यूपल बनाता है।

एक सीधा एक्सएमएल -> पायथन ऑब्जेक्ट स्ट्रक्चर के साथ मुख्य मुद्दा यह है कि एक जिम्मेदार सूची के लिए कोई अजगर एनालॉग नहीं है - यानी, तत्वों के साथ एक सूची है, जिसमें गुण भी होते हैं। यदि आप चाहें, तो यह एक ही समय में एक सूची और एक शब्दकोश दोनों है।

मैं पीईआरएक्सपी से परिणाम का विश्लेषण करता हूं, और संरचना के आधार पर सूची/शब्दकोश बनाता हूं - एक्सएमएल जो मैं कर रहा हूं वह सूची या विशेषता-आधारित है, दोनों कभी नहीं। (मैं एक ज्ञात स्रोत से डेटा उपभोग कर रहा हूँ)।

+0

पीईआरएक्सपी मूल पाइथन मॉड्यूल नहीं है, या है ना? – Martin

+1

नहीं, यह एक तृतीय पक्ष मॉड्यूल है, संभवतः सी में लिखा गया है। मुझे प्रश्न के उस हिस्से को याद करना होगा। –

3

पायथन के लिए उत्कृष्ट तृतीय पक्ष लाइब्रेरी pyxser भी है।

pyxser अजगर एक्सएमएल क्रमबद्धता के लिए खड़ा है और एक अजगर वस्तु एक्सएमएल serializer और deserializer है। अन्य शब्दों में, यह एक पायथन ऑब्जेक्ट को एक्सएमएल में परिवर्तित कर सकता है और साथ ही एक्सएमएल को मूल पायथन ऑब्जेक्ट में परिवर्तित कर सकता है।

0

मैं वाई यिप तुंग के xml2obj यहाँ उपलब्ध समारोह के साथ बहुत अच्छी भाग्यशाली रहे हैं: कोड के

http://code.activestate.com/recipes/534109-xml-to-python-data-structure/

यह ~ 84 लाइनों। यह देशी और शुद्ध पायथन है; xml.sax और पुनः (नियमित अभिव्यक्ति) पुस्तकालयों का उपयोग करना। आप बस इसे एक्सएमएल पास करते हैं और अपनी ऑब्जेक्ट वापस लेते हैं।