エスケープの必要性
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 コメント