Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.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
用Python中的lxml解析XML文件_Python_Xml_Xml Parsing_Lxml - Fatal编程技术网

用Python中的lxml解析XML文件

用Python中的lxml解析XML文件,python,xml,xml-parsing,lxml,Python,Xml,Xml Parsing,Lxml,我需要解析一个xml文件,比如example.xml,它如下所示: <?xml version="1.0" encoding="ISO-8859-1"?> <nf:rpc-reply xmlns:nf="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns="http://www.cisco.com/nxos:1.0:if_manager"> <nf:data> <show> <interf

我需要解析一个xml文件,比如example.xml,它如下所示:

<?xml version="1.0" encoding="ISO-8859-1"?>
<nf:rpc-reply xmlns:nf="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns="http://www.cisco.com/nxos:1.0:if_manager">
 <nf:data>
  <show>
   <interface>
    <__XML__OPT_Cmd_show_interface___readonly__>
     <__readonly__>
      <TABLE_interface>
       <ROW_interface>
        <interface>Ethernet1/1</interface>
        <state>down</state>
        <state_rsn_desc>Link not connected</state_rsn_desc>
        <admin_state>up</admin_state>

您需要在此处处理名称空间:

from lxml import etree

parser = etree.XMLParser()
tree = etree.parse('example.xml', parser)
ns = {'ns': 'http://www.cisco.com/nxos:1.0:if_manager'}

interface = tree.find('//ns:ROW_interface', namespaces=ns)
print [interface.find('.//ns:interface', namespaces=ns).text,
       interface.find('.//ns:state', namespaces=ns).text]
印刷品:

['Ethernet1/1', 'down']
Interface(interface='Ethernet1/1', state='down')

使用:

印刷品:

['Ethernet1/1', 'down']
Interface(interface='Ethernet1/1', state='down')

这样,是否可以将提取的数据直接添加到命名元组而不是列表?像这样interafces=('interfaces'['interface'['interface','state'])@dragon很好,你也可以尝试利用..最后一点,我们可以用同样的方式解析字符串而不是文件吗?@dragon当然,使用
fromstring
而不是
解析