lxml

2011-02-23 15 views
10

के साथ पाइथन सुंदर एक्सएमएल प्रिंटर 'बदसूरत' एक्सएमएल के साथ मौजूदा फाइल से पढ़ने के बाद और कुछ संशोधन करने के बाद, सुंदर प्रिंटिंग काम नहीं करती है। मैंने etree.write(FILE_NAME, pretty_print=True) की कोशिश की है।lxml

मैं निम्न XML है:

<testsuites tests="14" failures="0" disabled="0" errors="0" time="0.306" name="AllTests"> 
    <testsuite name="AIR" tests="14" failures="0" disabled="0" errors="0" time="0.306"> 
.... 

और मैं इसे इस तरह का उपयोग करें:

tree = etree.parse('original.xml') 
root = tree.getroot() 

...  
# modifications 
... 

with open(FILE_NAME, "w") as f: 
    tree.write(f, pretty_print=True) 

उत्तर

33

मेरे लिए, इस समस्या को हल नहीं किया गया था जब तक मैं इस छोटे से tidbit यहाँ देखा:

http://lxml.de/FAQ.html#why-doesn-t-the-pretty-print-option-reformat-my-xml-output

लघु संस्करण:

इस आदेश के साथ फाइल में पढ़ें:

>>> parser = etree.XMLParser(remove_blank_text=True) 
>>> tree = etree.parse(filename, parser) 

कि "रीसेट" होगा पहले से ही विद्यमान खरोज, उत्पादन इसे सही ढंग से खुद खरोज है उत्पन्न करने के लिए अनुमति देता है। फिर सामान्य के रूप में pretty_print:

>>> tree.write(<output_file_name>, pretty_print=True) 
6
fp = file('out.txt', 'w') 
print(e.tree.tostring(...), file=fp) 
fp.close() 
+0

e.tree क्या है? –

7

खैर, API docs के अनुसार, वहाँ कोई विधि "लिखने" में है एलएक्सएमएल एट्री मॉड्यूल। फ़ाइल में एक सुंदर मुद्रित एक्सएमएल स्ट्रिंग प्राप्त करने के संबंध में आपके पास कुछ विकल्प हैं। तुम इतनी तरह ToString विधि का उपयोग कर सकते हैं:

f = open('doc.xml', 'w') 
f.write(etree.tostring(root, pretty_print=True)) 
f.close() 

या, यदि आपका इनपुट स्रोत सही से भी कम है और/या आप अपने आउट करने के लिए आप के लिए अजगर रैपर में से एक का उपयोग कर सकता रख अधिक घुंडी और बटन चाहते हैं साफ मुक्ति

http://utidylib.berlios.de/

import tidy 
f.write(tidy.parseString(your_xml_str, **{'output_xml':1, 'indent':1, 'input_xml':1})) 

http://countergram.com/open-source/pytidylib

from tidylib import tidy_document 
document, errors = tidy_document(your_xml_str, options={'output_xml':1, 'indent':1, 'input_xml':1}) 
f.write(document) 
2

मुझे यकीन नहीं है कि अन्य उत्तरों ने इसका उल्लेख क्यों नहीं किया। यदि आप xml की रूट प्राप्त करना चाहते हैं तो getroot() नामक एक विधि है। मुझे आशा है कि मैंने आपके प्रश्न का उत्तर दिया (हालांकि थोड़ा देर हो चुकी है)।

tree = et.parse(xmlFile) 
root = tree.getroot() 
संबंधित मुद्दे