2010-03-18 50 views
3

我正在尝试查找如何更改现有xml文件元素值的示例。使用DOM更改现有XML文件中的元素值

使用下面的XML例子:

<book> 
    <title>My Book</title> 
    <author>John Smith</author> 
</book> 

如果我想使用DOM在Python脚本,以取代author元素值“约翰·史密斯”与“吉姆·约翰逊,我怎么会去这样做呢?我试图寻找这方面的例子,但没有这样做。任何帮助将不胜感激。

问候, Rylic

回答

5

。假定

s = ''' 
<book> 
    <title>My Book</title> 
    <author>John Smith</author> 
</book>''' 

DOM会是什么样子:

from xml.dom import minidom 

dom = minidom.parseString(s) # or parse(filename_or_file) 
for author in dom.getElementsByTagName('author'): 
    author.childNodes = [dom.createTextNode("Jane Smith")] 

但我鼓励你寻找到ElementTree的,它与XML一件轻而易举的工作:

from xml.etree import ElementTree 

et = ElementTree.fromstring(s) # or parse(filename_or_file) 
for author in et.findall('author'): 
    author.text = "Jane Smith" 
+0

非常感谢您的帮助。按照你的建议使用ElementTree,并且它工作正常。我可以用需要的改变写入xml文件。我确实注意到,当文件被写入时,文件被锁定。我假定该文件仍然可以写入。在用ElementTree写入文件之后,有没有解密文件的方法? – user296793 2010-03-19 14:48:26

+0

@ rylic38你如何处理写入文件?你可以在http://pastie.org/上粘贴代码示例吗? – Callahad 2010-03-19 15:30:51

+0

pastie.org不幸在工作中无法访问。我将在这里添加: 进口OS 导入XML 从xml.etree进口的ElementTree作为等 路径= “C:\\ \\温度books.xml” 中 树= et.parse(路径) 用于tree.findall(“作者”)作者: \t author.text =“Jane Doe的” \t tree.write(路径) 当运行此逐行在命令行中,XML文件的写入到,但被锁定。如果我退出python,文件被释放,然后我可以看到更改。 – user296793 2010-03-19 15:50:52