pythonでXMLを操作でのエラーが発生と文字化け②
以下のようなXMLファイルとpythonのファイルで実行しようとしているのですが、エラーが発生しどうすればエラーが消えるのかわかりません。また、文字化けも起きているのですが対処方法はありますか。(UTF-8を使用している)
エラーコード(実行結果)
C:\Users\g21125\python_xml_ex>python all-element.py
recipe
dish
Traceback (most recent call last):
File "all-element.py", line 32, in <module>
printAllElement(xdoc.documentElement)
File "all-element.py", line 18, in printAllElement
printAllElement(child, hierarchy+1)
File "all-element.py", line 18, in printAllElement
printAllElement(child, hierarchy+1)
File "all-element.py", line 24, in printAllElement
if data!='\n': print("{0}{1}".format(space, node.data))
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)
C:\Users\g21125\python_xml_ex>
sample.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>
all-element.py
# coding: utf-8
# 全ての要素にアクセスする
from xml.dom import minidom
# 全ての要素のタグ名もしくはテキストを表示する
def printAllElement(node, hierarchy=0):
# スペース調整
space = ''
for i in range(hierarchy*4):
space += ' '
# エレメントノードの場合はタグ名を表示する
if node.nodeType == node.ELEMENT_NODE:
print("{0}{1}".format(space, node.tagName))
# 再帰呼び出し
for child in node.childNodes:
printAllElement(child, hierarchy+1)
# テキストもしくはコメントだった場合dataを表示する
elif node.nodeType in [node.TEXT_NODE, node.COMMENT_NODE]:
# スペースを取り除く
data = node.data.replace(' ', '')
# 改行のみではなかった時のみ表示する
if data!='\n': print("{0}{1}".format(space, node.data))
# sample.xmlファイルを読み込む
xdoc = minidom.parse("sample.xml")
# 全ての要素を表示
printAllElement(xdoc.documentElement)
実行結果(正常終了)
recipe
dish
基本的なパン
material
小麦粉
material
イースト
material
水
material
食塩
point
process
全ての材料を一緒にして混ぜます。
process
十分にこねます。
process
布で覆い、暖かい部屋で1時間そのままにしておきます。
process
もう一度こねます。
process
パン焼きの容器に入れます。
process
布で覆い、暖かい部屋で1時間そのままにしておきます。
process
オーブンに入れて温度を180℃にして30分間焼きます。