用Python编辑XML文件内容
问题描述:
我想用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格式再次写入输出。
我对此并不满意,并想知道是否有人可以推荐一种更有效的方法呢?
谢谢。
答
我的第一个建议是使用lxml或其他一些Python XML parser而不是使用正则表达式。 XML不是可以用正则表达式可靠地解析的语言。 (如果你一直尝试用正则表达式bad things happen解析XML)
答
如果您在您的新旧和XML文件已经阅读并存储它们作为字典,然后覆盖旧的价值观很简单 - 使用update():
dict_old.update(dict_new)
这将使用dict_new
中的键/值对更新原始字典,覆盖现有密钥。正则表达式是不必要的,因为你大概只想匹配确切的键。
答
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
。
我特别推荐lxml。它包含一个与xml.etree.Elementree兼容的etree API,但也有许多有用的额外功能。只有可能的缺点是(显然)很难在某些平台上安装。我从来没有遇到任何麻烦,但我多次听到这个抱怨。 – 2010-06-01 22:06:42