2016-03-26 17 views
-2

私はファイルに書き出すことができるようにxmlファイルをビルドしようとしていますが、新しい行とタブなどで複雑になっています...xmlファイルを書式設定した、Pythonでビルドする方法

私はpython 2の縮小バージョンを使用しているので、これを行うためにモジュールを使用することはできません。すべてが純粋なPythonでなければなりません。

たとえば、このタイプの書式設定で新しい行とタブ(空白)をすべて保持するXMLファイルを作成するにはどうすればよいですか?

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

は、私はそこに、各ライン

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

など

ただし、スクリプトから取得した出力Imはそれが私の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はそれを解析してpretty 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) 

出力は次のとおりです。やっているので(<subitem>タグに包まれた)テキストコンテンツの要素がインデントされないことを

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

注意その内容を変更します(XMLはHTMLのように空白を無視しません)。

+0

Pythonで動作しません2.5.2 im afraid –

+1

@Ke。次回はあなたの質問にその種の要件を述べてください。 – elias

0

答えはxml.element.treeを使用していたとxml.domインポートminidomからのpython 2.5

関連する問題