Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ElementTree-findall()解析Python中的XML_Python_Xml_Elementtree_Findall - Fatal编程技术网

使用ElementTree-findall()解析Python中的XML

使用ElementTree-findall()解析Python中的XML,python,xml,elementtree,findall,Python,Xml,Elementtree,Findall,我在这里使用文档试图只获取某些元素的值(地址、掩码) 这是我的XML结构的一个示例: <?xml version="1.0" ?> <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:52622325-b136-40cf-bc36-85332e25b6f3" xmlns:nc="urn:ietf

我在这里使用文档试图只获取某些元素的值(地址、掩码)

这是我的XML结构的一个示例:

    <?xml version="1.0" ?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:52622325-b136-40cf-bc36-85332e25b6f3" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">
    <data>
            <native xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-native">
                    <interface>
                            <GigabitEthernet>
                                    <name>1</name>
                                    <ip>
                                            <address>
                                                    <primary>
                                                            <address>192.168.40.30</address>
                                                            <mask>255.255.255.0</mask>
                                                    </primary>
                                            </address>
                                    </ip>
                                    <logging>
                                            <event>
                                                    <link-status/>
                                                    </event>
                                            </logging>
                                            <mop>
                                                    <enabled>false</enabled>
                                                    <sysid>false</sysid>
                                            </mop>
                                            <negotiation xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-ethernet">
                                                    <auto>true</auto>
                                            </negotiation>
                                    </GigabitEthernet>
                                    <GigabitEthernet>
                                            <name>2</name>
                                            <ip>
                                                    <address>
                                                            <primary>
                                                                    <address>10.10.10.1</address>
                                                                    <mask>255.255.255.0</mask>
                                                            </primary>
                                                    </address>
                                            </ip>
                                            <logging>
                                                    <event>
                                                            <link-status/>
                                                    </event>
                                            </logging>
                                            <mop>
                                                    <enabled>false</enabled>
                                                    <sysid>false</sysid>
                                            </mop>
                                            <negotiation xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-ethernet">
                                                    <auto>true</auto>
                                            </negotiation>
                                    </GigabitEthernet>
                                    <GigabitEthernet>
                                            <name>3</name>
                                            <ip>
                                                    <address>
                                                            <primary>
                                                                    <address>30.30.30.1</address>
                                                                    <mask>255.255.255.0</mask>
                                                            </primary>
                                                    </address>
                                            </ip>
                                            <logging>
                                                    <event>
                                                            <link-status/>
                                                    </event>
                                            </logging>
                                            <mop>
                                                    <enabled>false</enabled>
                                                    <sysid>false</sysid>
                                            </mop>
                                            <negotiation xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-ethernet">
                                                    <auto>true</auto>
                                            </negotiation>
                                    </GigabitEthernet>
                                    <GigabitEthernet>
                                            <name>4</name>
                                            <logging>
                                                    <event>
                                                            <link-status/>
                                                    </event>
                                            </logging>
                                            <mop>
                                                    <enabled>false</enabled>
                                                    <sysid>false</sysid>
                                            </mop>
                                            <negotiation xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-ethernet">
                                                    <auto>true</auto>
                                            </negotiation>
                                    </GigabitEthernet>
                            </interface>
                    </native>
            </data>

但它什么也不返回。我尝试过其他的事情,但没有成功。有什么想法吗?谢谢你的建议。谢谢大家!

在引用XML元素时考虑使用名称空间:

import xml.etree.ElementTree as ET

# declare XML namespaces
namespaces = {'native': 'http://cisco.com/ns/yang/Cisco-IOS-XE-native'}

tree = ET.parse("C:\\Users\\Redha\\Documents\\test_network\\interface123.xml")
root = tree.getroot()

# call findall() using previously created namespaces map
for i in root.findall('.//native:native', namespaces):  
  print(i.tag)

您是否尝试过文档中的示例以及文档中的XML@barny是的,我确实检查了有关名称空间的部分-
native
有一个名称空间。@barny我检查了,但它没有进入循环中。请阅读()下的“我忘记了()”,此效果?从根目录更新了用户相对路径的答案。非常感谢您,我非常感谢您的帮助
import xml.etree.ElementTree as ET

# declare XML namespaces
namespaces = {'native': 'http://cisco.com/ns/yang/Cisco-IOS-XE-native'}

tree = ET.parse("C:\\Users\\Redha\\Documents\\test_network\\interface123.xml")
root = tree.getroot()

# call findall() using previously created namespaces map
for i in root.findall('.//native:native', namespaces):  
  print(i.tag)