使用Etree和Python编辑XML

时间:2014-05-18 15:54:06

标签: python xml jboss elementtree

我有一个Jboss host.xml文件,其有效结构为

<host xmlns="urn:jboss:domain:1.5">
...
    <domain-controller>
       <remote host="${jboss.domain.master.address}" port="${jboss.domain.master.port:9999}" security-realm="ManagementRealm"/>
    </domain-controller>
...
</host>

我正在尝试使用Etree根据传递给脚本的第一个参数更新远程主机,但是使用以下代码,它甚至无法找到域控制器节

import xml.etree.ElementTree as ET
import sys

newhost=sys.argv[1]

tree = ET.parse('host.xml').getroot()
print len(tree.findall('domain-controller'))
for elem in tree.findall('domain-controller'):
        print elem
    oldhost = elem.find('./remote').text
    print oldhosthost
    oldhost.set('host','newhost')

我已经能够使用minidomgetElementsByTagName找到正确的元素,但宁愿使用Etree,因为这似乎是首选方法。

有人会介意我说我做错了吗?

1 个答案:

答案 0 :(得分:2)

由于您的XML位于命名空间(xmlns)中,因此您的标记的前缀为命名空间:

for elem in tree.findall('{urn:jboss:domain:1.5}domain-controller'):

使用ElementTree时,请参阅此主题以获取名称空间中标记的替代地址:Parsing XML with namespace in Python via 'ElementTree'