xml.etree.ElementTree
Python2とその関数についての説明parse()
。この関数は、最初の引数としてソースを取ります。または、開いているファイルオブジェクトにすることも、ファイル名にすることもできます。関数はインスタンスを作成し、次のようなElementTree
引数をに渡します。tree.parse(...)
def parse(self, source, parser=None):
if not hasattr(source, "read"):
source = open(source, "rb")
if not parser:
parser = XMLParser(target=TreeBuilder())
while 1:
data = source.read(65536)
if not data:
break
parser.feed(data)
self._root = parser.close()
return self._root
3行目から、ファイル名が渡された場合、ファイルはバイナリモードで開かれていることが推測できます。このように、ファイルコンテンツがUTF-8であった場合、UTF-8でエンコードされたバイナリコンテンツで要素を処理しています。この場合、出力ファイルもバイナリモードで開く必要があります。
もう1つの可能性はcodecs.open(filename, encoding='utf-8')
、入力ファイルを開き、開いているファイルオブジェクトをに渡すために使用することxml.etree.ElementTree.parse(...)
です。このように、ElementTree
インスタンスはUnicode文字列で機能するため、コンテンツを書き戻すときに結果をUTF-8にエンコードする必要があります。この場合、codecs.open(...)
UTF-8で書き込みにも使用できます。開いた出力ファイルオブジェクトを上記のに渡すtree.write(f)
か、ファイルを開いてもらうことがtree.write(filename, encoding='utf-8')
できます。