pythonでXMLを操作でのエラーが発生と文字化け③
以下のようなXMLファイルとpythonのファイルで実行しようとしているのですが、エラーが発生しどうすればエラーが消えるのかわかりません。また、文字化けも起きているのですが対処方法はありますか。(UTF-8を使用している)
エラーコード(実行結果)
C:\Users\g21125\python_xml_ex>python copy-element.py
Traceback (most recent call last):
File "copy-element.py", line 20, in <module>
print(xdoc.toxml())
File "C:\Python27\lib\xml\dom\minidom.py", line 46, in toxml
return self.toprettyxml("", "", encoding)
File "C:\Python27\lib\xml\dom\minidom.py", line 61, in toprettyxml
return writer.getvalue()
File "C:\Python27\lib\StringIO.py", line 271, in getvalue
self.buf += ''.join(self.buflist)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
C:\Users\g21125\python_xml_ex>
XMLファイル
<!-- language: lang-xml -->
<?xml version="1.0" encoding="UTF-8"?>
<recipe name="パン" preparations-time="5分" cokking-time="3時間">
<dish>基本的なパン</dish>
<material quantity='3' unit='カップ'>小麦粉</material>
<material quantity='0.25' unit='オンス'>イースト</material>
<material quantity='1.5' unit='カップ'>水</material>
<material quantity='1' unit='ティースプーン'>食塩</material>
<point>
<process>全ての材料を一緒にして混ぜます。</process>
<process>十分にこねます。</process>
<process>布で覆い、暖かい部屋で1時間そのままにしておきます。</process>
<process>もう一度こねます。</process>
<process>パン焼きの容器に入れます。</process>
<process>布で覆い、暖かい部屋で1時間そのままにしておきます。</process>
<process>オーブンに入れて温度を180℃にして30分間焼きます。</process>
</point>
</recipe>
Pythonコード
<!-- language: lang-python -->
# coding: utf-8
# element のクローンを生成, 追加する
from xml.dom import minidom
# sample.xmlファイルを読み込む
xdoc = minidom.parse("sample.xml")
# レシピを取得
recipe = xdoc.documentElement
# レシピをコピー
recipe2 = xdoc.documentElement.cloneNode(recipe)
# コピーしたレシピ内にある料理名を変更
recipe2.getElementsByTagName("dish").item(0).childNodes[0].data="不都合なパン"
# コピーしたレシピをドキュメントに追加
xdoc.insertBefore(recipe2, recipe)
# 内容を文字列に変換して表示
print(xdoc.toxml())
実行結果
<?xml version="1.0" ?>
<recipe cokking-time="3時間" name="パン" preparations-time="5分">
<dish>不都合なパン</dish>
<material quantity="3" unit="カップ">小麦粉</material>
<material quantity="0.25" unit="オンス">イースト</material>
<material quantity="1.5" unit="カップ">水</material>
<material quantity="1" unit="ティースプーン">食塩</material>
<point>
<process>全ての材料を一緒にして混ぜます。</process>
<process>十分にこねます。</process>
<process>布で覆い、暖かい部屋で1時間そのままにしておきます。</process>
<process>もう一度こねます。</process>
<process>パン焼きの容器に入れます。</process>
<process>布で覆い、暖かい部屋で1時間そのままにしておきます。</process>
<process>オーブンに入れて温度を180℃にして30分間焼きます。</process>
</point>
</recipe>
<recipe cokking-time="3時間" name="パン" preparations-time="5分">
<dish>基本的なパン</dish>
<material quantity="3" unit="カップ">小麦粉</material>
<material quantity="0.25" unit="オンス">イースト</material>
<material quantity="1.5" unit="カップ">水</material>
<material quantity="1" unit="ティースプーン">食塩</material>
<point>
<process>全ての材料を一緒にして混ぜます。</process>
<process>十分にこねます。</process>
<process>布で覆い、暖かい部屋で1時間そのままにしておきます。</process>
<process>もう一度こねます。</process>
<process>パン焼きの容器に入れます。</process>
<process>布で覆い、暖かい部屋で1時間そのままにしておきます。</process>
<process>オーブンに入れて温度を180℃にして30分間焼きます。</process>
</point>
</recipe>