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

时间:2008-10-07 16:23:52

标签: python xml text

假设我有一个名为'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 个答案:

答案 0 :(得分:4)

使用Python的minidom

基本上您将采取以下步骤:

  1. 将XML数据读入DOM对象
  2. 使用DOM方法修改文档
  3. 将新DOM对象保存到新的XML文档
  4. 尽管这个过程,python规范应该很好地握住你的手。

答案 1 :(得分:3)

对于快速,非关键的XML操作,我非常喜欢P4X。它让你这样写:

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

答案 2 :(得分:3)

这是我根据@Ryan's answer撰写的内容:

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's answer代码行少,但需要非标准库)

答案 3 :(得分: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

(它创建一个包含Name和Value元素的Record元素(后者又包含name和value变量的值))。