3

私は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>

私がしなければならないのは、「説明」の値を「リンク」に入れて、両方とも「これはいくつかの情報です!」と言うことです。私はそのようにそれをやろうとしました:

#!/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]」は2つのノードをリンクしているように見えるため、「n.childNodes [1] .tagName = "link"」を実行して名前を修正すると、両方の子ノードは次のようになります。以前は両方とも「説明」だった「リンク」。

さらに、「n.childNodes [1] .nodeValue」を使用すると、変更が機能せず、XMLが元の形式で出力されます。私は何が間違っているのですか?

4

1 に答える 1

5

DOMをその場で変更できるかどうかはわかりませんxml.dom.minidom(ただし、ドキュメント全体を新しい値でゼロから作成することはうまくいくはずです)。

とにかく、に基づくソリューションを受け入れる場合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)
于 2011-11-11T12:56:22.827 に答える