使用Python修改XML文件中的文本的最佳方法是什么?

5

假设我有一个名为“ MyData.xml”的现有的简单XML文件,其中包含以下内容:

<?xml version="1.0" encoding="utf-8" ?>
<myElement>foo</myElement>

我希望将“foo”的文本值更改为“bar”,结果如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<myElement>bar</myElement>

完成后,我想保存更改。

实现所有这些的最简单和最简便的方法是什么?

4个回答

4

使用Python的minidom

基本上,您需要执行以下步骤:

  1. 将XML数据读入DOM对象中
  2. 使用DOM方法修改文档
  3. 将新DOM对象保存到新的XML文档中

Python规范应该可以很好地引导您完成此过程。


那么,对于问题#3,我是否需要显式覆盖现有文件,而不是使用minidom中可能隐式执行该操作的某些内置函数? - Ray
2
Ray: 是的,任何DOM操作都只在内存中进行。你将不得不复制到一个新文件或覆盖现有文件。有关如何处理修改现有文件的提示,请参见此帖子:https://dev59.com/8nVC5IYBdhLWcg3w-mZO - technomalogical

3

对于快速、非关键性的XML操作,我非常喜欢使用P4X。它让你可以像这样编写代码:

import p4x
doc = p4x.P4X (open(file).read)
doc.myElement = 'bar'

此程序的当前版本(最后更新于2005年)在导入Python 2.7.2时会出现语法错误,不能直接使用。 - Roni Yaniv

3

这是我根据@Ryan的回答编写的代码:

from xml.dom.minidom import parse
import os

# create a backup of original file
new_file_name = 'MyData.xml'
old_file_name = new_file_name + "~"
os.rename(new_file_name, old_file_name)

# change text value of element
doc = parse(old_file_name)
node = doc.getElementsByTagName('myElement')
node[0].firstChild.nodeValue = 'bar'

# persist changes to new file
xml_file = open(new_file_name, "w")
doc.writexml(xml_file, encoding="utf-8")
xml_file.close()

我不确定这是否是最简单和最容易的方法,但它确实有效。(@Javier的答案代码行数更少,但需要非标准库)


1
你可能还想查看Uche Ogbuji的优秀XML数据绑定库Amara: http://uche.ogbuji.net/tech/4suite/amara (文档在这里: http://platea.pntic.mec.es/~jmorilla/amara/manual/
Amara的酷炫之处在于它将XML文档转换为Python对象,因此您可以轻松地执行以下操作:
record = doc.xml_create_element(u'Record')

nameElem = doc.xml_create_element(u'Name', content=unicode(name))

record.xml_append(nameElem)

valueElem = doc.xml_create_element(u'Value', content=unicode(value))

record.xml_append(valueElem

(它创建一个包含名称和值元素的记录元素(这些元素又包含名称和值变量的值))。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接