Python没有在xml文件上正确循环

时间:2013-07-26 17:43:31

标签: python xml loops

我很难让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>

1 个答案:

答案 0 :(得分:2)

这一行

attribute_list = srv_xmldoc.getElementsByTagName('element')

是问题所在。您正在抓取文档中的所有“元素”元素,而不是当前“服务器”节点的所有子节点。这意味着您的循环每次都会加载前6个“元素”节点的内容,这就是您没有看到IP地址更新的原因。您应该遍历服务器的childNodes,并在必要时比较节点名称以确保它是正确的类型。