2012-05-06 13 views
7

मैंने xml.etree.elementtree.Element का उपयोग करके एक XML दस्तावेज़ बनाया है, और ElementTree.write() फ़ंक्शन का उपयोग करके इसे मुद्रित करना चाहता था लेकिन घोषणा पत्र जो बाहर आता हैपायथन: xml.etree.elementtree.ElemenTtree.write() घोषणा टैग

<?xml version='1.0' encoding='UTF-8'?> 

जबकि मुझे डबल कोट्स में होना आवश्यक है। क्या इसे बदलने का कोई तरीका है?

+0

उह ... आपको डबल कोट्स की आवश्यकता क्यों है? –

+0

यह भी क्यों मायने रखता है? यह सिंगल या डबल कोट्स के साथ समान रूप से वैध एक्सएमएल है। – mata

+2

क्योंकि यह एक असाइनमेंट है और किसी कारण से शिक्षक xml पर एक diff करता है। तत्वों की तुलना करने के बजाय। – Bg1987

उत्तर

1

अंततः मैं toString समारोह का इस्तेमाल किया और संलग्न एक्सएमएल सही टैग और उसके बाद पाइथन file.write फ़ंक्शन। यह बदसूरत है (और मैं फ़ाइल के वास्तविक एन्कोडिंग के बारे में झूठ बोल रहा हूं) लेकिन यह काम करता है।

+0

क्या आप इस कोड को लिखने के लिए आपके द्वारा लिखे गए कोड को प्रदान कर सकते हैं? –

0

मुझे कई अन्य कार्यस्थल उपकरण में हैक्स के कारण, दूसरी तरफ छोड़कर, मुझे एक ही चीज़ बहुत कुछ करना पड़ा, जो एकल उद्धरण मांगते हैं जहां पायथन का ElementTree.write डबल कोट्स में डालता है। (कोड का थोड़ा सा शाब्दिक स्ट्रिंग status='ok' को देखता है और status="ok" को पहचानता नहीं है। हाँ, यह कोड कई तरीकों से टूटा हुआ है, वास्तव में-लेकिन मुझे बस इसके आसपास काम करना है।)

सौभाग्य से "उपयोगकर्ता डेटा" एकल या डबल कोट्स &apos; और &quot; (क्रमशः) के रूप में एन्कोड किए गए हैं। मेरे मामले में मैं पहले से ही tostring बजाय write (अन्य कारणों के लिए) का उपयोग कर रहा था, इसलिए मेरे पास है: (। जाहिर है आप replace("'", '"') बजाय चाहता हूँ)

import xml.etree.ElementTree as ET 
# [... mass snippage] 
     text = ET.tostring(reply).replace('"', "'") 
     # [... snippaage] 
     self.wfile.write(text) 

+0

समस्या यह है कि कुछ एकल उद्धृत मानों में डबल कोट्स हो सकते हैं। सरल प्रतिस्थापन सामग्री तोड़ सकता है। – pepr

+0

@pepr: मैं सैद्धांतिक संभावना प्रदान करूंगा, लेकिन मेरे सभी परीक्षणों में (जो निश्चित रूप से मेरे डेटा के लिए विशिष्ट थे, और शायद स्थापित पायथन पुस्तकालय भी), 'xml.etree.ElementTree' हमेशा डबल कोट्स को ' " 'अगर उन्हें उस स्थिति में अनुमति दी गई थी। – torek

0

मुझे एक ही समस्या थी, ElementTree.py के कोड में देखा और निम्नलिखित को देखा।

रूट टैग के लिए (एकल उद्धरण):

 if method == "xml": 
      write("<?xml version='1.0' encoding='%s'?>\n" % encoding) 

और विशेषताओं के लिए (डबल कोट्स):

write(" %s=\"%s\"" % (qnames[k], v)) 

ऐसा नहीं है कि जिस तरह से hardcoded है ...

मैं इसे बदल (स्थानीय रूप से):

"<?xml version=\"1.0\" encoding=\"%s\"?>\n" 

इसलिए प्रत्येक विशेषता को अब डबल उद्धृत किया गया है।

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