2016-03-26 70 views
-2

我試圖在python中構建一個xml文件,這樣我就可以將它寫出到一個文件中,但是我遇到了新行和tab鍵等問題的複雜問題......如何在python中構建xml文件,格式爲

我不能使用一個模塊來做到這一點 - 因爲我使用了Python 2的削減版本。它必須都是純Python。

例如,如何創建一個這種類型的格式化XML文件,它保留所有的新行和製表符(空白)?

例如

<?xml version="1.0" encoding="UTF-8"?> 
<myfiledata> 
    <mydata> 
      blahblah 
    </mydata> 
</myfiledata> 

我試圖包圍每一行

' <myfiledata>' +\n 
'    blahblah' +\n 

但是,輸出林從腳本得到的是沒有什麼接近它的外觀在我的Python文件中,是額外的白色空間,新的線不能正常工作。

有沒有什麼明確的方法來做到這一點?我寧願編輯一個文件,看起來有點像我將結束 - 爲了清晰起見...

+0

有一個看看['''lxml''']( https://pypi.python.org/pypi/lxml)包,看看它是否可以幫助你。 – wwii

+0

對不起,我更新了答案,我不能使用lxml,它必須是純python –

+2

你可能需要一個多行字符串。看到這個http://stackoverflow.com/questions/2504411/proper-indentation-for-python-multiline-strings的一些想法。 –

回答

1

您可以使用saxutils的XMLGenerator來生成XML和xml.dom.minidom解析它,並打印漂亮的XML Python 2標準庫中的模塊)。

示例代碼創建一個XML和漂亮的印刷它:

from __future__ import print_function 
from xml.sax.saxutils import XMLGenerator 
import io 
import xml.dom.minidom 

def pprint_xml_string(s): 
    """Pretty-print an XML string with minidom""" 
    parsed = xml.dom.minidom.parse(io.BytesIO(s)) 
    return parsed.toprettyxml() 

# create a XML file in-memory: 
fp = io.BytesIO() 
xg = XMLGenerator(fp) 

xg.startDocument() 
xg.startElement('root', {}) 

xg.startElement('subitem', {}) 
xg.characters('text content') 
xg.endElement('subitem') 

xg.startElement('subitem', {}) 
xg.characters('text content for another subitem') 
xg.endElement('subitem') 

xg.endElement('root') 
xg.endDocument() 

# pretty-print it 
xml_string = fp.getvalue() 
pretty_xml = pprint_xml_string(xml_string) 
print(pretty_xml) 

輸出是:

<?xml version="1.0" ?> 
<root> 
    <subitem>text content</subitem> 
    <subitem>text content for another subitem</subitem> 
</root> 

注意,文本內容元素(包裹在<subitem>標籤)就不會被縮進,因爲這樣做所以會改變他們的內容(XML不會忽略像HTML那樣的空白)。

+0

不能在Python 2.5.2中工作恐怕 –

+1

@Ke。下次請在你的問題中說明這種要求。 – elias

0

答案是使用xml.element.tree和進口xml.dom的minidom命名

哪個都可以使用Python的2.5