我有一个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')
我已经能够使用minidom
和getElementsByTagName
找到正确的元素,但宁愿使用Etree
,因为这似乎是首选方法。
有人会介意我说我做错了吗?
答案 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'