でXMLを解析中に「タイプ」オブジェクトが属性「__getitem__」を持っていない私は、入力XML下回っていますはTypeError:Pythonの
<?xml version="1.0" ?>
<host xmlns="urn:jboss:domain:4.1">
<extensions>
<extension module="org.jboss.as.jmx"/>
</extensions>
<management>
<security-realms>
<security-realm name="ManagementRealm">
<server-identities>
<secret value="c2xhdmVfdXNlcl9wYXNzd29yZA=="/>
</server-identities>
</security-realm>
</security-realms>
</management>
</host>
私はすべての要素を反復処理していますし、サーバ・アイデンティティの要素が見つかったとき、私は以下のように関連付けられている属性を持つ、新しいサブ要素の秘密を追加しようとしています:、
def parse_xml():
tree = ET.parse('sample.xml')
root = tree.getroot()
for elements in tree.iter():
if "server-identities" in elements.tag:
c = ET.Element['secret']
c.attrib['value'] = "some_value"
elements.append(c)
if __name__=="__main__":
parse_xml()
しかしETとして
xml.etreeインポートのElementTreeからラインを
c = ET.Element['secret']
TypeError例外の原因となっている
Traceback (most recent call last):
File "parseXml.py", line 16, in <module>
parse_xml()
File "parseXml.py", line 10, in parse_xml
c = ET.Element['secret']
TypeError: 'type' object has no attribute '__getitem__'
- これはXMLで要素を追加するための正しい方法は何ですか?
- エラーはなぜ発生しますか?
編集:以下のキースの答えに基づいて解決策が見つかりました。下記のいずれかがそれを達成することができる方法です。
はまず、入力XMLは、あなたがXMLを解析する前にこの名前空間を登録してください、または他のPythonはそれにプレフィックスを追加するグローバル・ネームスペース、
xmlns="urn:jboss:domain:4.1"
を持っています、XMLコードの
ET.register_namespace('','urn:jboss:domain:4.1')
レストの構造を変更する以下の通りである:
for elements in tree.iter():
if "server-identities" in elements.tag:
c = ET.Element('secret')
c.attrib['value'] = "some_value"
elements.append(c)
tree.write('sample.xml')
ありがとう
キース、それは働いた。しかし、elements.append(c)はXMLに書き戻しますか? –
もう一度書き留めてください。 – Keith