0

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

4

1 回答 1

2

这条线

attribute_list = srv_xmldoc.getElementsByTagName('element')

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

于 2013-07-26T17:59:48.900 回答