2010-06-01 85 views
1

我想用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

我的第一个建议是使用lxml或其他一些Python XML parser而不是使用正则表达式。 XML不是可以用正则表达式可靠地解析的语言。 (如果你一直尝试用正则表达式bad things happen解析XML)

+0

我特别推荐lxml。它包含一个与xml.etree.Elementree兼容的etree API,但也有许多有用的额外功能。只有可能的缺点是(显然)很难在某些平台上安装。我从来没有遇到任何麻烦,但我多次听到这个抱怨。 – 2010-06-01 22:06:42

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