現在、XML ファイルの Element 値にロジックを適用しようとしています。具体的には、要素名/属性自体には触れずに、すべての値を UTF-8 にエンコードしようとしています。
サンプル XML は次のとおりです。
<?xml version="1.0"?>
<sd_1>
<sd_2>
<sd_3>\311 is a fancy kind of E</sd_3>
</sd_2>
</sd_1>
現在、これを達成するために3つの方法を試しましたが、成功しませんでした:
まず、各要素をループして、.text と .parse を使用して値を取得しようとしました。
import xml.etree.ElementTree as ET
et = ET.parse('xml/test.xml')
for child in et.getroot():
for core in child:
core_value = str(core.text)
core.text = core_value.encode('utf-8')
et.write('output.xml')
これにより、テキスト \311 が正しく変更されていない XML ファイルが生成され、そのままの状態になります。
次に、cElementTree を使用して .iterparse を試してみましたが、役に立ちませんでした。
import xml.etree.cElementTree as etree
xml_file_path = 'xml/test.xml'
with open(xml_file_path) as xml_file:
tree = etree.iterparse(xml_file)
for items in tree:
for item in items:
print item.text
etree.write('output1.xml')
これにより、次の結果が得られます。
"...print item.text\n', "AttributeError: 'str' object has no attribute 'text'..."
そこで何が間違っているのかわかりませんが、同じ配置で複数の例を見てきましたが、.text なしで要素を印刷すると、最初に「end」の文字列値を持つタプルが表示されます。この方法で問題が発生します。
.findall() などの要素名を指定せずに、各要素に格納されている値にロジックを適用して、xml をファイルに書き込むときに、プログラムが反復されたときに行われた変更を保存するように、要素を適切に反復するにはどうすればよいですか要素値?