将python xml项输出与list进行比较

时间:2015-02-10 21:27:41

标签: python xml elementtree xml.etree

我在python上很新。我目前正在开发一个小项目,我在这个结构中有一个XML文档。

<commands>
 <level1 name="sh">show></level1>
  <level2 name="ip">ip</level2>
   <level3 name="int">interface</level3>
    <level4 name="br">show ip interface brief</level4>
 <level1 name="int>interface</level1>
</commands>

我需要做的是从所有元素中提取属性值并将它们与列表进行比较。

for in i tree.iter():
 attrib = i.items()
 x = ['name', 'sh']
 if attrib.index(0) in x
   print "BLa"

我的问题是我收到一条错误,上面写着“ValueError:0不在列表中”。我尝试了很多不同的东西,看它是否像列表一样,但事实并非如此。奇怪的是,当我打印'attrib'时,我看到了一个列表。

直接来自xml.etree.ElemenTree.items()的doc 2.7.3(我的版本) - “items()     将元素属性作为(name,value)对的序列返回。属性以任意顺序返回。

请帮助我,请询问任何其他信息。

编辑:为了澄清我想匹配一个列表,比如说x = ['sh',ip,'int','br']到每个元素值,直到每个列表索引匹配为止,你得到一个最终的元素文本, “show ip interface brief”

1 个答案:

答案 0 :(得分:0)

好的,我看到iter()是递归的:

dicts = []
for node in root.iter():
    if node.tag == 'level1':
        dicts.append({}) # create new dict for tag chain
    if dicts and 'name' in node.attrib.keys():
        dicts[-1][node.attrib['name']] = node.text.rstrip().split() # list of words

dicts的输出:

{'sh': ['show'], 'br': ['show', 'ip', 'interface', 'brief'], 'ip': ['ip'], 'int': ['interface']}
{'int': ['interface']}