使用Python编辑XML文件内容
我正在尝试用Python读取一个XML文件,这个文件里包含了一些参数名称和对应的值,比如:
...
<parameter name='par1'>
<value>24</value>
</parameter>
<parameter name='par2'>
<value>Blue/Red/Green</value>
</parameter>
...
然后我想把一个字典传给它,这个字典里有参数名称,比如{'par1':'53','par2':'黄/粉/黑',...},以及对应的新值,用来替换XML文件里的旧值。最后的结果应该会覆盖掉原来的XML文件。
目前我正在把XML转换成Python字典,然后通过比较一些元素和处理正则表达式,再把结果写回XML格式。
我对这种方法不是很满意,所以想问问有没有人能推荐更有效的做法?
谢谢。
3 个回答
0
如果你已经把旧的和新的XML文件都读进来了,并把它们存成字典,那么更新旧的值就很简单了——只需要用到 update() 方法:
dict_old.update(dict_new)
这个方法会用 dict_new
中的键值对来更新原来的字典,覆盖掉原来已有的键。这里不需要用正则表达式,因为你大概只想匹配完全相同的键。
1
xml.etree.ElementTree
这个库在处理XML文件时比其他解析器更符合Python的风格。
这里有个例子,教你如何根据你的数据来构建一个 dict
(字典):
>>> src = """<params>
<parameter name='par1'> <value>24</value> </parameter>
<parameter name='par2'> <value>Blue/Red/Green</value> </parameter>
</params>
"""
>>> tree = ElementTree.XML(src)
>>> dict(((i.attrib['name'], i.find('value').text) for i in tree.getiterator('parameter')))
{'par2': 'Blue/Red/Green', 'par1': '24'}
>>>
在你修改了 dict
的值之后,可以用类似的方法来构建一个新的 ElementTree
,然后使用write
方法生成一个XML文件。你可以参考文档中的例子,看看如何直接在 etree
结构中修改内容。也许你根本不需要用到 dict
。
3
我首先建议你使用 lxml 或其他一些 Python XML 解析器,而不是用正则表达式。因为 XML 这种格式不适合用正则表达式来解析,效果不可靠。 (如果你一直用正则表达式来解析 XML,会出现很多问题)