2013-07-18 15 views
5

Programım temel olarak bir girdi dosyası okuyor, bu dosyadan lxml.etree oluyor, örneğin etiğe bir düğüm ekledim ve sonra tekrar bir dosyaya yazdırmak istiyorum. Yani kullanmak bir dosya üzerinde geri yazmak için:Çıktının XML olarak biçimlendirilmesi lxml

et.write('Documents\Write.xml', pretty_print=True) 

oysa benim çıkış geçerli:

<Variable Name="one" RefID="two"> 
    <Component Type="three"> 
     <Value>four</Value> 
    </Component> 
</Variable> 

am:

<Variable Name="one" RefID="two"><Component Type="three"><Value>four</Value></Component></Variable> 

ben gibi bir şey istiyorum iken Yanıldım mı? Ben birçok çözüm denedim ama hiçbiri işe yaramıyor (beautifulsoup, tidy, parser ...)

+0

Pencereler ile ilişkili olabilir? Eğer çıktı dosyanızı 'io' modülü ile açmayı denerseniz:' fp = io.open ('Documents \ Write.xml', 'w', newline = '\ r \ n') ve sonra 'fp yazınız. "like this" et.write (fp, pretty_print = True) " (Bkz. http://docs.python.org/2/library/io.html#io.open) –

+0

Merhaba Paul, ne deniyorum? diyor ama fp nedir? Yazmak istediğim dosya? Üzgünüm, yeni başlayan biriyim! – JAWE

+0

Sadece yazmak istediğiniz dosyayı temsil eden bir dosya tanıtıcısı, evet. et.write() ', io.open'den (http://lxml.de/api/lxml.etree._ElementTree-class.html#write) gelen bir şey gibi bir dosya adı veya açık dosya tanıtıcısı girebilir.). 'Import io' sonra 'et.write (io.open (' Documents \ Write.xml ',' w ', newline =' \ r \ n '), pretty_print = True)' ı deneyebilirsiniz. ' –

cevap

1

Bu garip, çünkü tam olarak çalışması gereken bir yol. Bunu deneyebilir misiniz: Bu kendini işleyebilir biçimlendirilmiş bir dize oluştursun

root = etree.XML(YOUR XML STRING) 
print etree.tostring(root, pretty_print=True) 

<Variable Name="one" RefID="two"> 
    <Component Type="three"> 
    <Value>four</Value> 
    </Component> 
</Variable> 

.

+1

Cevabınız için teşekkürler, ancak böyle yaparım. Ve bu şekilde çalışır, ama bir dosyaya yazdığımda olmaz ... Neden bilmiyorum! Yine de teşekkürler. – JAWE

+0

Ayrıca tam olarak bunu yapıyordum ama aynı sorunla karşılaşıyorum @JAWE – adubey

2

Standart ayrıştırıcıyı kullanmayın. remove_blank_text = True ile bir özel çözümleyici kullanın.

parser = etree.XMLParser(remove_blank_text=True) 
tree = etree.parse(self.output_file, parser=parser) 
// Do stuff with the tree here 
tree.write(your_output_file, pretty_print=True) 
+0

Aynı sorun vardı ve bu benim için aynı çalıştı: http://stackoverflow.com/questions/7903759/pretty-print-in- lxml-başarısız-zaman-ı-add-etiketler-to-a-ayrıştırılır-ağacının – cptPH