使用Python从xml中的一个节点遍历到另一个节点
我对Python中的XML非常陌生,我从网络设备得到以下XML字符串作为响应:使用Python从xml中的一个节点遍历到另一个节点,python,xml,lxml,Python,Xml,Lxml,我对Python中的XML非常陌生,我从网络设备得到以下XML字符串作为响应: '<Response MajorVersion="1" MinorVersion="0"><Get><Configuration><OSPF MajorVersion="19" MinorVersion="2"><ProcessTable><Process><Naming><ProcessName>1</Proces
'<Response MajorVersion="1" MinorVersion="0"><Get><Configuration><OSPF MajorVersion="19" MinorVersion="2"><ProcessTable><Process><Naming><ProcessName>1</ProcessName></Naming><DefaultVRF><AreaTable><Area><Naming><AreaID>0</AreaID></Naming><Running>true</Running><NameScopeTable><NameScope><Naming><InterfaceName>Loopback0</InterfaceName></Naming><Running>true</Running><Cost>1000</Cost></NameScope><NameScope><Naming><InterfaceName>Loopback1</InterfaceName></Naming><Running>true</Running><Cost>1</Cost></NameScope><NameScope><Naming><InterfaceName>GigabitEthernet0/0/0/0</InterfaceName></Naming><Running>true</Running><Cost>1</Cost></NameScope></NameScopeTable></Area></AreaTable></DefaultVRF><Start>true</Start></Process></ProcessTable></OSPF></Configuration></Get><ResultSummary ErrorCount="0" /></Response>'
打印“d”时,此代码提供以下输出:
{'GigabitEthernet0/0/0/0': {'cost': '1'},
'Loopback0': {'cost': '1000'},
'Loopback1': {'cost': '1'}}
我希望输出中有类似的内容:
{'GigabitEthernet0/0/0/0': {'cost': '1', 'area': 0},
'Loopback0': {'cost': '1000', 'area': 0},
'Loopback1': {'cost': '1', 'area': 0}}
对我的代码的任何建议或修改都将不胜感激 我会使用符号:
node.xpath(".//preceding::AreaID")[0].text
我正在执行的完整代码:
from lxml import etree as ET
x = ET.parse("input.xml")
d = {}
for node in x.iter('NameScope'):
int_name = str(node.find('Naming/InterfaceName').text)
d[int_name] = {
'cost': str(node.find('Cost').text),
'area': node.xpath(".//preceding::AreaID")[0].text
}
print(d)
印刷品:
{
'Loopback0': {'cost': '1000', 'area': '0'},
'Loopback1': {'cost': '1', 'area': '0'},
'GigabitEthernet0/0/0/0': {'cost': '1', 'area': '0'}
}
谢谢你的回复。但是,“x”是一个xml.etree.ElementTree.Element对象。因此,节点没有xpath属性。我使用的是Python 2.7。此外,我还尝试了您建议的方法:“area=str(node.find(“.//preference::AreaID”)[0].text)”,然后出现了错误“SyntaxError:前缀映射中未找到前缀'preference'”。此外,我的输入不是xml文件,而是一个xml.etree.ElementTree.Element对象。@pypep278,即使我定义了一个
data
string变量并将x
定义为x=ET.fromstring(data)
,它也适用于我。如果使用xpath()
方法会发生什么?非常感谢!与您的导入相反,我使用了以下导入,因此它对我来说失败了:import xml.etree.ElementTree as ET
{
'Loopback0': {'cost': '1000', 'area': '0'},
'Loopback1': {'cost': '1', 'area': '0'},
'GigabitEthernet0/0/0/0': {'cost': '1', 'area': '0'}
}