मैं ElementTree.Element
स्ट्रिंग में कैसे परिवर्तित करूँ ?
पायथन 3 के लिए:
xml_str = ElementTree.tostring(xml, encoding='unicode')
पायथन 2 के लिए:
xml_str = ElementTree.tostring(xml, encoding='utf-8')
दोनों पायथन 2 और 3 के साथ संगतता के लिए:
xml_str = ElementTree.tostring(xml).decode()
उदाहरण उपयोग
from xml.etree import ElementTree
xml = ElementTree.Element("Person", Name="John")
xml_str = ElementTree.tostring(xml).decode()
print(xml_str)
आउटपुट:
<Person Name="John" />
व्याख्या
नाम का तात्पर्य होने के बावजूद, ElementTree.tostring()
पायथन 2 और 3 में डिफ़ॉल्ट रूप से एक बाईटस्ट्रिंग देता है। यह पायथन 3 में एक मुद्दा है, जो स्ट्रिंग्स के लिए यूनिकोड का उपयोग करता है ।
पायथन 2 में आप str
टेक्स्ट और बाइनरी डेटा दोनों के लिए टाइप का उपयोग कर सकते हैं । दुर्भाग्य से दो अलग-अलग अवधारणाओं का यह संगम भंगुर कोड हो सकता है जो कभी-कभी किसी भी तरह के डेटा के लिए काम करता है, कभी-कभी नहीं। [...]
पाठ और बाइनरी डेटा के बीच अंतर को स्पष्ट करने और अधिक स्पष्ट करने के लिए, [पायथन 3] ने पाठ और द्विआधारी डेटा को अलग-अलग प्रकार से बनाया है जो नेत्रहीन रूप से एक साथ मिश्रित नहीं हो सकते ।
स्रोत: पोर्टिंग पायथन 2 कोड टू पायथन 3
यदि हम जानते हैं कि पायथन के किस संस्करण का उपयोग किया जा रहा है, तो हम एन्कोडिंग को unicode
या के रूप में निर्दिष्ट कर सकते हैं utf-8
। अन्यथा, यदि हमें पायथन 2 और 3 दोनों के साथ संगतता की आवश्यकता है, तो हम decode()
सही प्रकार में परिवर्तित करने के लिए उपयोग कर सकते हैं ।
संदर्भ के लिए, मैंने .tostring()
पायथन 2 और पायथन 3 के बीच परिणामों की तुलना शामिल की है ।
ElementTree.tostring(xml)
# Python 3: b'<Person Name="John" />'
# Python 2: <Person Name="John" />
ElementTree.tostring(xml, encoding='unicode')
# Python 3: <Person Name="John" />
# Python 2: LookupError: unknown encoding: unicode
ElementTree.tostring(xml, encoding='utf-8')
# Python 3: b'<Person Name="John" />'
# Python 2: <Person Name="John" />
ElementTree.tostring(xml).decode()
# Python 3: <Person Name="John" />
# Python 2: <Person Name="John" />
मार्टिंस पीटर्स को यह इंगित करने के लिए धन्यवाद कि str
पायथन 2 और 3 के बीच डेटाटाइप बदल गया।
Str () का उपयोग क्यों नहीं किया जाता है?
अधिकांश परिदृश्यों में, किसी वस्तु को स्ट्रिंग में बदलने के लिए str()
" कैनेनिकल " तरीका का उपयोग करना होगा । दुर्भाग्यवश, इसका उपयोग Element
ऑब्जेक्ट के डेटा के एक स्ट्रिंग प्रतिनिधित्व के बजाय, हेक्सस्ट्रिंग के रूप में ऑब्जेक्ट के स्थान को रिटर्न में करता है।
from xml.etree import ElementTree
xml = ElementTree.Element("Person", Name="John")
print(str(xml)) # <Element 'Person' at 0x00497A80>
<?xml version='1.0' encoding='utf8'?>
हेडर को प्रीपेंड करता है । जब यहutf-8
हेडर शामिल नहीं है। इसके अलावा अगरet
एक ElementTree था, तो आपको पास होना होगाet.getroot()
।