Python Minidom:改变节点值

3 投票
1 回答
10917 浏览
提问于 2025-04-17 06:01

我正在使用Python的minidom库来处理一些XML文件。这是一个示例文件:

<document>
    <item>
            <link>http://www.this-is-a-url.com/</link>
            <description>This is some information!</description>
    </item>

    <item>
            <link>http://www.this-is-a-url.com/</link>
            <description>This is some information!</description>
    </item>

    <item>
            <link>http://www.this-is-a-url.com/</link>
            <description>This is some information!</description>
    </item>
</document>

我需要做的是把“description”里的内容放到“link”里,这样两个地方都显示“This is some information!”。我试着这样做:

#!/usr/bin/python

from xml.dom.minidom import parse

xmlData = parse("file.xml")

itmNode = xmlData.getElementsByTagName("item")
for n in itmNode:
    n.childNodes[1] = n.childNodes[3]
    n.childNodes[1].tagName = "link"
print xmlData.toxml()

但是“n.childNodes[1] = n.childNodes[3]”似乎把这两个节点连在了一起,所以当我执行“n.childNodes[1].tagName = 'link'”来修改名字时,两个子节点都变成了“link”,而之前它们都是“description”。

而且,如果我使用“n.childNodes[1].nodeValue”,更改也没有效果,XML仍然以原来的形式打印出来。我到底哪里做错了呢?

1 个回答

5

我不太确定你能不能直接用 xml.dom.minidom 来修改现有的DOM(不过从头开始用新值创建整个文档应该是可以的)。

不过,如果你愿意接受一个基于 xml.etree.ElementTree 的解决方案(我强烈推荐使用这个,因为它的界面更友好),那么你可以使用以下代码:

from xml.etree.ElementTree import ElementTree, dump

tree = ElementTree()
tree.parse('file.xml')

items = tree.findall('item')
for item in items:
    link, description = list(item)
    link.text = description.text

dump(tree)

撰写回答