エスケープの必要性
XML では、特定の文字をエスケープする必要があります。これは、XML パーサーがそれらの文字を特別な意味を持つマークアップとして解釈してしまうためです。エスケープが必要な主な文字は以下の通りです:
&(アンパサンド):&でエスケープ<(小なり記号):<でエスケープ>(大なり記号):>でエスケープ"(二重引用符):"でエスケープ'(一重引用符):'でエスケープ
解決策
あなたのコードでは、& をエスケープする必要があります。以下のように修正してください:
python
1import xml.etree.ElementTree as ET 2import xml.dom.minidom as md 3 4xmlRoot = ET.Element('root')5# ElementTreeでXMLを作成6 7# 文字列パースを介してminidomへ移す8document = md.parseString('<div>&</div>')9 10file = open('test.xml', 'w')11# エンコーディング、改行、全体のインデント、子要素の追加インデントを設定しつつファイルへ書き出し12document.writexml(file, encoding='utf-8', newl='\n', indent='', addindent=' ')13file.close()
この修正により、& がエスケープされ、xml.dom.minidom.parseString() が正常に動作するはずです。
代替手段
xml.dom.minidom は古いモジュールで、より新しい xml.etree.ElementTree の方が推奨されています。ElementTree を使えば、エスケープの必要はありません。以下のようにコードを書き換えることができます:
python
1import xml.etree.ElementTree as ET 2 3root = ET.Element('root')4div = ET.SubElement(root, 'div')5div.text = '&'6 7tree = ET.ElementTree(root)8tree.write('test.xml', encoding='utf-8', xml_declaration=True)
この方法では、& をエスケープする必要がなく、より簡潔なコードになります。

0 コメント