0
我有输入XML以下:类型错误:“类型”对象没有属性“__getitem__”在Python而解析XML
<?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>
我遍历所有元素和当服务器标识元件被发现,我我试图添加一个新的子元素的秘密,有如下的相关属性:作为ET从xml.etree进口ElementTree的
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()
然而,行
c = ET.Element['secret']
导致类型错误
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有一个全局命名空间,
xmlns="urn:jboss:domain:4.1"
因此,请确保您解析XML之前注册这个命名空间,否则Python将添加一个前缀它,这改变了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