如何用Python在XML中搜索和替换?
我正在制作一个脚本,用来翻译xml文档。这其实挺酷的,基本思路是(而且现在也能正常工作)打开一个xml文件(或者一堆xml文件),解析这个xml,提取一些标签之间的内容,然后用谷歌翻译的接口翻译这些内容,并把翻译后的结果替换回xml文件里。
正如我所说的,这个功能现在是可以用的,但只适用于格式比较严格的xml文档。现在我需要让它兼容格式不同的文档。所以我想到了这个办法:
解析xml,找到一个节点,比如:
<template>lorem lipsum dolor mit amet<think><set name="she">Ada</set></think></template>
把这个节点的内容保存为一个字符串,然后对这个字符串进行一些正则表达式的搜索和替换。不过我现在不知道该怎么继续下去了。我想在这个字符串(xml节点)中查找标签之间的文本,比如“lorem lipsum dolor mit amet”和“Ada”,然后调用一个函数,把这些文本作为参数传进去,最后把函数的结果放回到原来的位置。
我不能简单地提取文本然后重建xml格式,原因是不同的xml节点格式可能会不一样,所以我需要保持它们完全一致……
2 个回答
7
不要试图用正则表达式来解析XML!因为XML不是一种简单的格式,所以正则表达式不适合用来处理这类任务。
应该使用真正的XML解析器。对于Python来说,有很多这样的解析器可以直接使用。快速搜索一下,我找到了一条关于如何在Python中使用XPath的讨论。
5
ElementTree 是处理这种解析的一个不错的选择。它使用起来很简单,而且占用资源少,支持在你对数据进行操作后输出XML(只需简单地调用write()就可以了)。在最新版本的Python中(我记得是2.6及以上版本),它已经包含在标准库里了。