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

2024-04-16 14:34:41 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: 文件pathnameservervalueattributexmlelement
1条回答
网友
1楼 · 发布于 2024-04-16 14:34:41

这条线

attribute_list = srv_xmldoc.getElementsByTagName('element')

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

相关问题 更多 >