-1

ループを通過するたびにノードを作成したいのですが、現在はループの最後の値のみが使用されます。Pythonを使用してこれを達成するにはどうすればよいですか。以下は私の例です。

私のxml :-

<person>
<user name="david" password="super"></user>
<user name="alen" password="boss"></user>
<user name="windeesal" password="sp"></user>
</person>

Python コード:

import xml.etree.ElementTree as ET

doc = ET.parse("users.xml")
root = doc.getroot() #Returns the root element for this tree.
root.keys()          #Returns the elements attribute names as a list. The names are returned in an arbitrary order
for child in root:
    name = child.attrib['name']
    password = child.attrib['password']

root = ET.Element("person")
user = ET.SubElement(root, "user")
user.set("username",username)
user.set("password",password)

tree = ET.ElementTree(root)
myxml = tree.write("new.xml")

print myxml 

コードの出力には、ループの最後の値のみが含まれます:(

<person>
<user password="sp" username="windeesal" />
</person>

ループを通過するたびにノードを作成し、結果を結合してファイルに書き込む方法.? 本当に初心者です詳しく教えてください。どうもありがとうございました 。

4

3 に答える 3

3

次を試してください。Python についてのあなたの理解は非常に基本的であるように思われるので、問題について何を書けばよいかわかりません。

説明が必要なら聞いてください!:)

import xml.etree.ElementTree as ET

doc    = ET.parse("users.xml")
root = doc.getroot() #Returns the root element for this tree.
root_new  = ET.Element("person") 
for child in root:
    name                = child.attrib['name']
    password             = child.attrib['password']

    user  = ET.SubElement(root_new, "user") # create subelement in cycle! 
    user.set("username",name)               # username variable is not declared
    user.set("password",password)

tree = ET.ElementTree(root_new)
tree.write("new.xml")

import sys
tree.write(sys.stdout)
于 2012-11-01T08:07:32.470 に答える
2

「ループするたびにノードを作成する」コツは、ループにノードを作成することです。あなたがしたい:

for child in root:
    name     = child.attrib['name']
    password = child.attrib['password']

    user = ET.SubElement(root_new, "user")
    user.set("username", name)
    user.set("password", password)

Python は空白に敏感です。下の 3 行をインデントしない場合、それらはループの一部ではありません。

于 2012-11-01T08:14:38.780 に答える
1

ルートで読み取ったツリーを上書きしています。あなたが読んだものに追加

import xml.etree.ElementTree as ET

doc    = ET.parse("users.xml")
root = doc.getroot() #Returns the root element for this tree.
root.keys()          #Returns the elements attribute names as a list. The names are returned in an arbitrary order
for child in root:
    name                = child.attrib['name']
    password             = child.attrib['password']

user  = ET.SubElement(root, "user")
user.set("username",'test')
user.set("password",'me')

tree = ET.ElementTree(root)
tree.write("new.xml")

結果については、new.xml も確認してください。tree.write は明らかに None を返します

于 2012-11-01T07:52:11.423 に答える