0

XML ドキュメントの多数の値を変更しようとしています。私はいくつかの異なることを試みましたが、何も変更していないようですが、変更時刻が変更されたときにファイルにアクセスしているように見えますが、値は変更されていません。

from xml.etree import ElementTree as et
import os
import xml

path = os.path.expanduser(r'~\AppData\Roaming\etc\etc\somefile.xml')
et = et.parse(path)

for name in et.findall('name'):
    if name == 'sometext1':
        name.text = "sometext2"
et.write(path)

2番目にこれを試しましたが、 AttributeError: 'str' object has no attribute 'text' が発生します

with open(path,'r+') as f:
tree = et.parse(f)

for node in tree.iter('favourite'):
name = node.attrib.get('name')

if name == 'sometext1':
    name.text = "sometext2"
tree.write(path)

誰が私がどこで間違ったのかアドバイスできますか

4

1 に答える 1

0
  • この線

    et = et.parse(path)
    

    et右側にモジュールとして、左側に変数名として使用します。この時点以降、ElementTree モジュールにアクセスすることはできません (または、少なくとも非常に難しくなります)。だから明確にするet。たとえば、 ETをモジュールとし、 を とtreeしますElementTree

  • for ループでnameは Element であるため、文字列との比較nameは常に False になります。代わりに使用

    name.text == 'sometext1'
    

from xml.etree import ElementTree as ET
import os

path = os.path.expanduser(r'~\AppData\Roaming\etc\etc\somefile.xml')
tree = ET.parse(path)

for name in tree.findall('name'):
    if name.text == 'sometext1':
        name.text = "sometext2"
        print(name) # for debugging only
tree.write(path)
于 2013-05-12T23:58:33.397 に答える