1
我是很新的XML使用Python和我有以下XML字符串,我得到的是来自网络设备的响应:从一个节点遍历XML到另一个使用Python
'<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>'
我有以下代码来检索接口信息以及与之相关的接口成本。不过,我还想获得与每个界面相关的'AreaID'标签作为我的词典的一部分。无法正常浏览树检索areaID表示标记值:
for node in x.iter('NameScope'):
int_name = str(node.find('Naming/InterfaceName').text)
d[int_name] = {}
d[int_name]['cost'] = str(node.find('Cost').text)
此代码“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}}
任何建议或修改我的代码将非常感激!
感谢您的答复。但是,'x'是一个xml.etree.ElementTree.Element对象。因此,节点不具有xpath属性。我在Python 2.7。此外,我尝试了你的建议,做到这一点:“area = str(node.find(”.//前置:: AreaID“)[0] .text)”,我得到了这个错误“SyntaxError:prefix'在'not'在前缀映射中找到 “ – pypep278
另外,我的输入不是xml文件,而是xml.etree.ElementTree.Element对象。 – pypep278
@ pypep278好吧,即使我定义了一个'data'字符串变量并将'x'定义为'x = ET.fromstring(data)',它也适用于我。如果使用'xpath()'方法会发生什么? – alecxe