Python Minidom : Change Value of Node



我正在使用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]。更改不起作用,XML将以原始形式打印。我做错了什么?

我不确定您是否可以使用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)

相关内容

最新更新