PythonでXMLを触ってみる6 minidomね
前回はノードの削除をしました。
今回はタグ名を変換してみます。
ロジックが良くわからずpythonメーリングリストにお世話になりました。
Sample.xml
<?xml version="1.0" encoding="UTF-8"?> <cars> <car> <name>乗用車</name> <price>150</price> </car> <car> <name>トラック</name> <price>500</price> </car> <car> <name>オープンカー</name> <price>200</price> </car> </cars>
minidom8.py
# -*- coding: utf-8 -*- import xml.dom import xml.dom.minidom translate_dict = {'cars': u'車リスト', 'car': u'車', 'name': u'名前', 'price': u'価格'} def walk(doc, node): if (node.nodeType == xml.dom.Node.TEXT_NODE and len(node.nodeValue.strip()) == 0): return if node.nodeType == xml.dom.Node.TEXT_NODE: return doc.createTextNode(node.data) result = doc.createElement(translate_dict[node.nodeName]) for child in node.childNodes: ch = walk(doc,child) if ch != None: result.appendChild(ch) return result doc = xml.dom.minidom.parse('Sample.xml') doc2 = xml.dom.minidom.Document() root = doc.documentElement root2 = walk(doc2, root) doc2.appendChild(root2) print(doc2.toprettyxml(' ', '\n', 'utf-8'))
実行結果
$ python minidom8.py <?xml version="1.0" encoding="utf-8"?> <車リスト> <車> <名前> 乗用車 </名前> <価格> 150 </価格> </車> <車> <名前> トラック </名前> <価格> 500 </価格> </車> <車> <名前> オープンカー </名前> <価格> 200 </価格> </車> </車リスト>