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