我正在尝试使用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格式编写输出。
我对此并不满意,并且想知道是否有人可以推荐一种更有效的方法吗?
感谢。
答案 0 :(得分:3)
我的第一个建议是使用lxml或其他Python XML parser而不是使用正则表达式。 XML不是可以可靠地使用正则表达式解析的语言。 (如果您一直尝试使用正则表达式解析XML bad things happen )
答案 1 :(得分:1)
xml.etree.ElementTree
比其他XML解析器更加pythonic。
根据您的数据构建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
。
答案 2 :(得分:0)
如果您已阅读新旧XML文件并将其存储为词典,则可以轻松覆盖旧值 - 使用update():
dict_old.update(dict_new)
使用dict_new
中的键/值对更新原始字典,覆盖现有密钥。正则表达式是不必要的,因为你可能只想匹配精确的键。