使用Python编辑XML文件内容

1 投票
3 回答
1147 浏览
提问于 2025-04-15 23:24

我正在尝试用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,会出现很多问题

撰写回答