我有一个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,因为这似乎是首选的方法。
有人能告诉我我做错了什么吗?
发布于 2014-05-18 16:08:19
由于您的XML位于名称空间(xmlns)中,您的标记以名称空间为前缀:
for elem in tree.findall('{urn:jboss:domain:1.5}domain-controller'):在使用ElementTree:Parsing XML with namespace in Python via 'ElementTree'时,请参阅此线程以了解名称空间中标记的可选寻址。
https://stackoverflow.com/questions/23723869
复制相似问题