我有这样的xml文件:
<lala>
<blabla>
<qweqwe>test</qweqwe>
</blabla>
</lala>
我需要打开它并将 qweqwe 中的 test 更改为另一个值,例如 newtest。之后,我需要将其保存为新的 xml 文件。请帮助我如何使用python以最好的方式做到这一点?
我推荐使用lmxl
- 一个简单的例子是:
from lxml import etree as et
>>> xml="""<lala>
<blabla>
<qweqwe>test</qweqwe>
</blabla>
</lala>
"""
>>> test = et.fromstring(xml)
>>> for i in test.xpath('//qweqwe'):
i.text = 'adsfadfasdfasdfasdf' # put logic here
>>> print et.tostring(test) # write this to file instead
<lala>
<blabla>
<qweqwe>adsfadfasdfasdfasdf</qweqwe>
</blabla>
</lala>
与此处有关 python 的所有其他 XML 问题一样,请查看lxml
链接: http: //lxml.de/
对于这样的任务,我发现内置库的minidom 既快速又简单。但是,我不能说我已经在速度和内存使用方面对它与其他各种库进行了广泛的比较。
我喜欢它,因为它重量轻,自 Python 2.0 以来可以快速开发和呈现
这是一个关于修改 xml 元素的值的问题,但使用建议的答案来修改 xml 元素的文本应该不会太过分。
如果您尝试更改所有测试实例,您只需打开文件并查找字符串匹配项
所以
result = []
f = open("xml file")
for i in f:
if i == "<qweqwe>test</qweqwe>":
i = "<qweqwe>My change</qweqwe>"
result.append(i)
f.close()
f = open("new xml file")
for x in result:
f.writeline(x)
对于打算做同样事情但编码困难的人来说,这是一个通用的解决方案,它用 UTF-16 编码更改了 .xml。
它在 python 2.7 中工作,修改位于文件夹“a”中名为“b.xml”的 .xml 文件,其中“a”位于 python 的“工作文件夹”中。它将新修改的文件输出为文件夹“a”中的“c.xml”,而在 python 2.7 之外进一步使用时不会产生编码错误(对我而言)。
file = io.open('a/b.xml', 'r', encoding='utf-16')
lines = file.readlines()
outFile = open('a/c.xml', 'w')
for line in lines[0:len(lines)]:
#replace author:
pattern = '<Author>'
subst = ' <Author>' + domain + '\\' + user_name + '</Author>'
if pattern in line:
line = subst
print line
outFile.writelines(line)