我很难让python循环/遍历xml文件。我能够加载文件并获取每个元素,但变量赋值(在内部循环内)似乎永远不会超过第一遍。下面的代码/输出如下。任何建设性的帮助表示赞赏。
srv_xmldoc = minidom.parse('servers.xml')
server_list = srv_xmldoc.getElementsByTagName('server')
for srv in server_list:
print srv #To verify that I'm moving down the list
attribute_list = srv_xmldoc.getElementsByTagName('element')
for e in attribute_list:
#Setup the server field entries
server = attribute_list[0].attributes['name'].value
username = attribute_list[1].attributes['name'].value
password = attribute_list[2].attributes['name'].value
delimeter = attribute_list[3].attributes['name'].value
remotePath =attribute_list[4].attributes['name'].value
fileType = attribute_list[5].attributes['name'].value
#Start processing this server entry
process_entry(server, username, password, delimeter, remotePath, fileType)
输出如下:
<DOM Element: server at 0x7f09410d6248>
192.168.1.6
<DOM Element: server at 0x7f09410d6d88>
192.168.1.6
<DOM Element: server at 0x7f09410d7908>
192.168.1.6
如您所见,srv变量不断变化但IP地址不变。
xml文件的示例如下:
<servers>
<server>
<element name="192.168.1.6"></element>
<element name="server"></element>
<element name="blah0"></element>
<element name="|"></element>
<element name="/path/to/data/"></element>
<element name=".psv"></element>
</server>
<server>
<element name="192.168.1.7"></element>
<element name="server2"></element>
<element name="blah"></element>
<element name=";"></element>
<element name="/path/to/data/"></element>
<element name=".csv"></element>
</server>
<server>
<element name="192.168.1.8"></element>
<element name="server3"></element>
<element name="blah2"></element>
<element name=","></element>
<element name="/path/to/data/"></element>
<element name=".csv"></element>
</server>
答案 0 :(得分:2)
这一行
attribute_list = srv_xmldoc.getElementsByTagName('element')
是问题所在。您正在抓取文档中的所有“元素”元素,而不是当前“服务器”节点的所有子节点。这意味着您的循环每次都会加载前6个“元素”节点的内容,这就是您没有看到IP地址更新的原因。您应该遍历服务器的childNodes,并在必要时比较节点名称以确保它是正确的类型。