使用Python编辑XML文件内容

时间:2010-06-01 15:32:51

标签: 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 :(得分: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中的键/值对更新原始字典,覆盖现有密钥。正则表达式是不必要的,因为你可能只想匹配精确的键。