2012-05-06 14 views
7

xml.etree.elementtree.Elementを使用してXML文書を作成しましたが、ElementTree.write()関数 を使用してXML文書を印刷したかったのですが出てくる宣言タグはPython:xml.etree.elementtree.ElemenTtree.write()宣言タグ

<?xml version='1.0' encoding='UTF-8'?> 

二重引用符で囲む必要があります。それを変える方法はありますか?

+0

Uh ...なぜ二重引用符が必要ですか? –

+0

これはなぜ重要なのでしょうか?これは、単一引用符または二重引用符でも同様に有効なxmlです。 – mata

+2

その割り当てと何らかの理由で教師がxmlのdiffを行うためです。要素を比較する代わりに。 – Bg1987

答えて

1

結局私は、ToString関数を使用して追加しますXMLを正しいタグ にコピーし、次にpythonのfile.write関数を使用します。 これは醜いです(実際にはファイルの実際のエンコーディングに関することですが)。

+0

これを回避するために書いたコードを提供してもらえますか? –

0

pythonのElementTree.writeが二重引用符で囲まれているシングルクォートを必要とするさまざまな$職場ツールのハッキングのために、私はまったく同じことをしなければなりませんでした。 (コードの一部がリテラル文字列status='ok'を探し、status="ok"を認識しません。実際にはいくつかの点で問題がありますが、実際には回避する必要があります)。

幸いにも "user data" single二重引用符はそれぞれ&apos;&quot;(それぞれ)としてエンコードされます。私の場合は、すでに(他の理由のために)tostringではなく、writeを使用して、私は持っていました:

import xml.etree.ElementTree as ET 
# [... mass snippage] 
     text = ET.tostring(reply).replace('"', "'") 
     # [... snippaage] 
     self.wfile.write(text) 

(。もちろん、あなたが代わりにreplace("'", '"')をお勧めします)

+0

問題は、一重引用符で囲まれた値の中に二重引用符が含まれることがあることです。簡単な交換はコンテンツを破損する可能性があります。 – pepr

+0

@pepr:私は理論的な可能性を与えますが、すべてのテスト(自分のデータに特有のもので、おそらくインストールされているPythonライブラリにも当てはまります)では、 'xml.etree.ElementTree'は常に二重引用符を' " 'がその位置にまったく許可されていれば。 – torek

0

私は同じ問題を抱えていましたが、ElementTree.pyのコードを見て、以下を見ました。

ルートタグ(単一引用符)については

:私はそれを変更

write(" %s=\"%s\"" % (qnames[k], v)) 

それはそのようにハードコードされます...

 if method == "xml": 
      write("<?xml version='1.0' encoding='%s'?>\n" % encoding) 

と属性(二重引用符)について(ローカル)に:

"<?xml version=\"1.0\" encoding=\"%s\"?>\n" 

すべての属性は二重引用符で囲まれています。