पृष्ठभूमि
मैं डेटाबेस तक पहुंचने के लिए SQLite का उपयोग कर रहा हूं और वांछित जानकारी पुनर्प्राप्त कर रहा हूं। मैं उस जानकारी के साथ एक एक्सएमएल फ़ाइल बनाने के लिए पायथन संस्करण 2.6 में ElementTree का उपयोग कर रहा हूं।मैं एक एक्सएमएल फ़ाइल पर सुंदर प्रिंट करने के लिए पाइथन की एलिमेंट ट्री कैसे प्राप्त करूं?
कोड
import sqlite3
import xml.etree.ElementTree as ET
# NOTE: Omitted code where I acccess the database,
# pull data, and add elements to the tree
tree = ET.ElementTree(root)
# Pretty printing to Python shell for testing purposes
from xml.dom import minidom
print minidom.parseString(ET.tostring(root)).toprettyxml(indent = " ")
####### Here lies my problem #######
tree.write("New_Database.xml")
प्रयास
मैं ऊपर कोड की अंतिम पंक्ति के स्थान पर tree.write("New_Database.xml", "utf-8")
उपयोग करने की कोशिश की है, लेकिन यह बिल्कुल भी एक्सएमएल के लेआउट को संपादित नहीं किया - यह अभी भी एक गड़बड़ गड़बड़ है। बजाय अजगर खोल, जो त्रुटि AttributeError देता को यह मुद्रण के
tree = minidom.parseString(ET.tostring(root)).toprettyxml(indent = " ")
:
मैं भी बेला के आसपास का फैसला किया और कर की कोशिश की 'यूनिकोड' ऑब्जेक्ट कोई विशेषता 'लिखने' है।
प्रश्न
जब मैं अंतिम पंक्ति पर एक XML फ़ाइल करने के लिए अपने पेड़ लिखते हैं, वहाँ एक रास्ता बहुत एक्सएमएल फ़ाइल को मुद्रित करने के लिए के रूप में यह अजगर खोल के लिए करता है?
क्या मैं यहां toprettyxml()
का उपयोग कर सकता हूं या ऐसा करने का कोई अलग तरीका है?
यह उत्तर स्पष्ट होगा यदि आपने 'import xml.dom.minidom को minidom' कथन के रूप में शामिल किया है, जो आवश्यक प्रतीत होता है। –
@ केनप्रोनोविसी संभवतः। वह आयात मूल प्रश्न में प्रकट होता है, लेकिन मैंने इसे यहां जोड़ा है इसलिए कोई भ्रम नहीं है। –
यह उत्तर किसी भी प्रकार के प्रश्नों पर अक्सर बार-बार दोहराया जाता है, लेकिन यह एक अच्छा जवाब है, लेकिन आपको पूरी एक्सएमएल पेड़ को एक स्ट्रिंग में बदलने की पूरी आवश्यकता है, इसे फिर से मुद्रित करने के लिए, इसे फिर से मुद्रित करने के लिए, इस बार बस अलग-अलग करें। यह एक अच्छा दृष्टिकोण नहीं है। इसके बजाय lxml का प्रयोग करें और lxml द्वारा प्रदान की गई बिल्टिन विधि का उपयोग करके सीधे क्रमबद्ध करें, इस तरह से किसी भी इंटीग्रेटिव प्रिंटिंग को पीछे छोड़कर हटा दें। –