问题背景:
用Python写读写xml文件的代码,目的是修改第一个book节点中price节点的值并保存。xml举例如下:
<?xml version="1.0" encoding="utf-8">
<library>
<book1>
<name>book1</name>
<price>1</price>
<author>book1.author</author>
</book1>
<book2>
<name>book2</name>
<price>2</price>
<author>book2.author</author>
</book2>
<book3>
<name>book3</name>
<price>3</price>
<author>book3.author</author>
</book3>
</library>
问题描述
用Python写的读写xml文件的代码如下所示,
import os
import xml.etree.ElementTree as ET
file_path=r'test.xml'
tree=ET.ElementTree(file=file_path)
sub=tree.find('library').find('book1').find('price')
prices=[2, 3, 4, 5]
for price in prices:
sub.test=str(price)
tree.write(file_path, encoding="utf-8")
能正常的循环修改price的值,但是会删掉xml里的第一行声明,运行完代码后xml如下所示
<library>
<book1>
<name>book1</name>
<price>5</price>
<author>book1.author</author>
</book1>
<book2>
<name>book2</name>
<price>2</price>
<author>book2.author</author>
</book2>
<book3>
<name>book3</name>
<price>3</price>
<author>book3.author</author>
</book3>
</library>
原因分析:
在tree.write中加入xml_declaration=True即可,因为默认是False的。
解决方案:
修改后的代码如下所示
import os
import xml.etree.ElementTree as ET
file_path=r'test.xml'
tree=ET.ElementTree(file=file_path)
sub=tree.find('library').find('book1').find('price')
prices=[2, 3, 4, 5]
for price in prices:
sub.test=str(price)
tree.write(file_path, encoding="utf-8", xml_declaration=True)