2009-08-18 23 views
5

क्या कोई जानता है कि मुझे पायथन में एक एक्सएमएल फ़ाइल का डीओएम इंस्टेंस (पेड़) कैसे मिलेगा। मैं दो एक्सएमएल दस्तावेज़ों की तुलना एक दूसरे से करने की कोशिश कर रहा हूं जिसमें अलग-अलग क्रम में तत्व और गुण हो सकते हैं। यह मैं कैसे करूंगा?एक्सएमएल दस्तावेज़ का डीओएम पेड़ प्राप्त करना

उत्तर

2

व्यक्तिगत रूप से, जब भी संभव हो, मैं elementtree (अधिमानतः सी कार्यान्वयन जो पायथन की मानक लाइब्रेरी के साथ आता है, या lxml कार्यान्वयन के साथ आता है, लेकिन यह आवश्यक है कि केवल उच्च गति की बात हो)। यह मानक-अनुरूप डीओएम नहीं है, लेकिन एक ही जानकारी को एक और पाइथोनिक और आसान तरीके से रखती है। आप xml.etree.ElementTree.parse पर कॉल करके प्रारंभ कर सकते हैं, जो एक्सएमएल स्रोत लेता है और एक तत्व-पेड़ देता है; दोनों स्रोतों पर ऐसा करें, प्रत्येक मूल पेड़ को प्राप्त करने के लिए प्रत्येक तत्व पेड़ पर getroot का उपयोग करें, फिर मूल रूप से रूट तत्वों से शुरू होने वाले तत्वों की तुलना करें।

एक तत्व के बच्चे मानक डीओएम में तत्व पेड़ में एक अनुक्रम बनाते हैं, जिसका अर्थ है कि उनके आदेश को महत्वपूर्ण माना जाता है; लेकिन एक लेक्सर तुलना के लिए पाइथन को उनमें से सेट करना आसान है (या किसी प्रकार के थोड़ा अधिक प्रयास "बहु-सेट" के साथ, यदि आपके उपयोग के मामले में पुनरावृत्ति महत्वपूर्ण है, हालांकि ऑर्डर नहीं है)। किसी दिए गए तत्व के लिए विशेषताओं के लिए यह भी आसान है, जहां विशिष्टता आश्वासन दिया जाता है और आदेश अर्थात् प्रासंगिक नहीं है।

क्या कोई विशिष्ट कारण है कि आपको किसी तत्व के पेड़ की तरह वैकल्पिक कंटेनर के बजाय मानक डोम की आवश्यकता है, या क्या आप सामान्य ज्ञान में डीओएम शब्द का उपयोग कर रहे हैं ताकि तत्व का पेड़ ठीक रहे?

अतीत में मैंने PyRXP का उपयोग करके भी अच्छे परिणाम प्राप्त किए हैं, जो ElementTree की तुलना में एक कठिन और सरल प्रतिनिधित्व का उपयोग करता है। हालांकि, यह साल और साल पहले था; मेरे पास कोई हालिया अनुभव नहीं है कि आज पीईआरएक्सपी कैसे एलएक्सएमएल या सीमेंटमेंट्री के साथ तुलना करता है।

1

कुछ समाधान विचार करने के लिए:

  • minidom
  • amara (एक्सएमएल बाध्यकारी डेटा)
+0

मैंने मिनीडॉम देखा है और दस्तावेज़ीकरण में कोई जानकारी नहीं है कि एक पार्स फ़ाइल से डीओएम पेड़ कैसे प्राप्त करें। मैं दो पेड़ों की तुलना करना चाहता हूं ताकि आदेश कोई फर्क नहीं पड़ता। क्या आपको कोई विचार है कि यह कैसे करें? – Dave

+0

पायथन 2.6 में मिनीडॉम डॉक्यूमेंटेशन एक फ़ाइल से एक डोम प्राप्त करने का उदाहरण देता है (क्या आप किसी और चीज के बाद हैं) xml.dom से।minidom आयात पार्स, parseString dom1 = parse ('c: \\ temp \\ mydata.xml') # नाम से एक एक्सएमएल फ़ाइल पार्स – Mark

0

XML दस्तावेज़ उदाहरणों, एक अनुभवहीन पार्स डोम पेड़ों की तुलना काम नहीं करेगा की तुलना के लिए। जब बच्चा तत्वों महत्वपूर्ण के आदेश है

  • : आप शायद अपनी खुद की NodeComperator कि रिकर्सिवली जैसे अपने विशिष्ट मानदंडों के आधार पर एक नोड और कुछ अन्य नोड के साथ अपने बच्चे की नोड्स और उसके बच्चे नोड्स तुलना लागू करने के लिए की आवश्यकता होगी ?
  • टेक्स्ट-सामग्री में सफेद जगह कब महत्वपूर्ण है?
  • क्या कुछ तत्वों के लिए डिफ़ॉल्ट मान हैं और क्या वे आपके पार्सर द्वारा लागू होते हैं?
  • चाहिए एंटिटी संदर्भ तुलना के लिए विस्तारित किया जा

Minidom फ़ाइलों को पार्स करने के लिए एक अच्छा प्रारंभिक बिंदु है और उपयोग करने के लिए आसान है। आपके विशिष्ट एप्लिकेशन के लिए तुलना फ़ंक्शन का वास्तविक कार्यान्वयन हालांकि आपके द्वारा किया जाना आवश्यक है।

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