मैं अजगर 2.7 करने के लिए स्थानांतरित करने के लिए कोशिश कर रहा हूँ और जब से यूनिकोड एक बिग डील हो तो मैं एक्सएमएल फाइल और टेक्स्ट के साथ उन लोगों के साथ निपटने की कोशिश और xml.etree.cElementTree
पुस्तकालय का उपयोग कर उन्हें पार्स चाहते हैं। लेकिन मैं इस त्रुटि के पार भाग गया:पायथन: यूनिकोड और ElementTree.parse
>>> import xml.etree.cElementTree as ET
>>> from io import StringIO
>>> source = """\
... <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
... <root>
... <Parent>
... <Child>
... <Element>Text</Element>
... </Child>
... </Parent>
... </root>
... """
>>> srcbuf = StringIO(source.decode('utf-8'))
>>> doc = ET.parse(srcbuf)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 56, in parse
File "<string>", line 35, in parse
cElementTree.ParseError: no element found: line 1, column 0
एक ही बात io.open('filename.xml', encoding='utf-8')
का उपयोग कर ET.parse
को पारित करने के लिए होता है:
>>> with io.open('test.xml', mode='w', encoding='utf-8') as fp:
... fp.write(source.decode('utf-8'))
...
150L
>>> with io.open('test.xml', mode='r', encoding='utf-8') as fp:
... fp.read()
...
u'<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>\n<root>\n <Parent>\n
<Child>\n <Element>Text</Element>\n </Child>\n </Parent>\n</root>\n
'
>>> with io.open('test.xml', mode='r', encoding='utf-8') as fp:
... ET.parse(fp)
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<string>", line 56, in parse
File "<string>", line 35, in parse
cElementTree.ParseError: no element found: line 1, column 0
वहाँ यूनिकोड और ईटी पार्स कि मैं यहाँ याद आ रही है के बारे में कुछ है?
संपादित: जाहिर है, एट पार्सर यूनिकोड इनपुट धारा के साथ अच्छी तरह से नहीं चलता है? निम्नलिखित काम करता है:
>>> with io.open('test.xml', mode='rb') as fp:
... ET.parse(fp)
...
<ElementTree object at 0x0180BC10>
लेकिन यह भी मतलब है मैं io.StringIO
उपयोग नहीं कर सकते अगर मैं एक में स्मृति पाठ से पार्स करने के लिए चाहते हैं, जब तक कि मैं यह पहली बार एक में स्मृति बफर में सांकेतिक शब्दों में बदलना?
मुझे एहसास नहीं हुआ कि कार्य मौजूद था। मामूली बिंदु हालांकि: 'सेस्ट्रिंग' एक 'एलिमेंट' देता है, जबकि 'पार्स'' एलिमेंट ट्री 'देता है। – Santa
इस फ़ंक्शन को इसके उपनाम, 'एक्सएमएल', यानी' xml.etree.cElementTree आयात XML 'के रूप में भी जाना जाता है। यह उपनाम वहां है ताकि यदि आपके कोड में एक्सएमएल स्थिर है तो यह अच्छी तरह से पढ़ेगा; आप बस 'fooDocument = XML ("" "..." "" ") कर सकते हैं। – Glyph