तारों की तुलना करना हमेशा काम नहीं करता है। गुणों का क्रम दो नोड्स समकक्ष पर विचार करने के लिए कोई फर्क नहीं पड़ता। हालांकि, यदि आप स्ट्रिंग तुलना करते हैं, तो ऑर्डर स्पष्ट रूप से मायने रखता है।
>>> from lxml import etree
>>> h1 = etree.XML('<hat color="blue" price="39.90"/>')
>>> h2 = etree.XML('<hat price="39.90" color="blue"/>')
>>> etree.tostring(h1) == etree.tostring(h2)
False
यह:
मुझे यकीन है कि अगर यह एक समस्या है या एक सुविधा है, लेकिन lxml.etree की मेरी संस्करण विशेषताओं के आदेश को बरकरार रखता है अगर वे एक फ़ाइल या एक स्ट्रिंग से पार्स कर रहे हैं नहीं कर रहा हूँ संस्करण-निर्भर हो सकता है (मैं पाइथन 2.7.3 का उपयोग lxml.etree 2.3.2 के साथ उबंटू पर करता हूं); मुझे याद है कि जब मैं (पठनीयता कारणों के लिए) चाहता था, तो मुझे एक साल पहले विशेषताओं के क्रम को नियंत्रित करने का कोई तरीका नहीं मिला।
जैसा कि मुझे विभिन्न धारावाहिकों द्वारा उत्पादित XML फ़ाइलों की तुलना करने की आवश्यकता है, मुझे टैग, टेक्स्ट, विशेषताओं और प्रत्येक नोड के बच्चों की तुलना करने की तुलना में कोई अन्य तरीका नहीं दिखता है। और निश्चित रूप से पूंछ, अगर वहाँ कुछ दिलचस्प है। lxml और xml.etree.ElementTree
सत्य का
तुलना में यह कार्यान्वयन निर्भर हो सकता है। जाहिर है, एलएक्सएमएल आदेशित आदेश या कुछ ऐसा मानक मानक xml.etree का उपयोग करता है।ElementTree विशेषताओं का क्रम बनाए रखने नहीं करता है: (। हाँ, नई पंक्तियां याद कर रहे हैं लेकिन यह एक छोटी सी समस्या है।)
Python 2.7.1 (r271:86832, Nov 27 2010, 17:19:03) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from lxml import etree
>>> h1 = etree.XML('<hat color="blue" price="39.90"/>')
>>> h2 = etree.XML('<hat price="39.90" color="blue"/>')
>>> etree.tostring(h1) == etree.tostring(h2)
False
>>> etree.tostring(h1)
'<hat color="blue" price="39.90"/>'
>>> etree.tostring(h2)
'<hat price="39.90" color="blue"/>'
>>> etree.dump(h1)
<hat color="blue" price="39.90"/>>>> etree.dump(h2)
<hat price="39.90" color="blue"/>>>>
>>> import xml.etree.ElementTree as ET
>>> h1 = ET.XML('<hat color="blue" price="39.90"/>')
>>> h1
<Element 'hat' at 0x2858978>
>>> h2 = ET.XML('<hat price="39.90" color="blue"/>')
>>> ET.dump(h1)
<hat color="blue" price="39.90" />
>>> ET.dump(h2)
<hat color="blue" price="39.90" />
>>> ET.tostring(h1) == ET.tostring(h2)
True
>>> ET.dump(h1) == ET.dump(h2)
<hat color="blue" price="39.90" />
<hat color="blue" price="39.90" />
True
एक और सवाल हो सकता है क्या महत्वहीन whan की तुलना माना जाता है। उदाहरण के लिए, कुछ टुकड़ों में अतिरिक्त रिक्त स्थान हो सकते हैं और हम परवाह नहीं करना चाहते हैं। इस तरह, कुछ सीरियलाइजिंग फ़ंक्शन लिखना हमेशा बेहतर होता है जो वास्तव में हमें आवश्यक काम करता है।
दो तत्वों की तुलना करने के लिए एक समारोह में पाया जा सकता [Itamar के जवाब] (http://stackoverflow.com/a/24349916/2371522) नीचे । – One