嵌套for循环,类型为'lxml.etree.ElementDepthFirstIterator'python3.4

时间:2015-01-31 23:17:20

标签: for-loop python-3.4

我正在使用python 3.4,试图在xml文件中找到类似的子树。

这是我的代码:

def find_unique_sub_tree(oneFile, resultPath, list_ignored_att):
      root = find_root(oneFile)
      idNodes = root.iter('xmlID')
      for n1 in idNodes: 
          id1 = n1.attrib['idName']
          for n2 in idNodes:
              id2 = n2.attrib['idName']
              do something

嵌套for循环的问题在于它只接受外循环中的第一项,当从内循环完成时,它永远不会返回从外循环中获取第二项。我理解这个问题但无法解决。 我试过这些解决方案:

idNodes = root.iter('xmlID')
idNodes2 = root.iter('xmlID')
for n1 in idNodes: 
      id1 = n1.attrib['idName']
      for n2 in idNodes2:

我也尝试过:

root = find_root(oneFile)
root2 = find_root(oneFile)
idNodes = root.iter('xmlID')
idNodes2 = root.iter('xmlID')
for n1 in idNodes: 
      id1 = n1.attrib['idName']
      for n2 in idNodes2:

这些并没有解决问题。

最后,我尝试了一个深层复制,但它给出了错误:

root = find_root(oneFile)
idNodes = root.iter('xmlID')
idNodes2 = copy.deepcopy(idNodes)
for n1 in idNodes: 
      id1 = n1.attrib['idName']
      for n2 in idNodes2:

所以我尝试了这个:

idNodes = list(root.iter('xmlID'))
idNodes2 = copy.deepcopy(idNodes)
for n1 in idNodes: 
   id1 = n1.attrib['idName']
   for n2 in idNodes2:

它删除了错误但没有解决问题

有人可以帮忙吗? 感谢

1 个答案:

答案 0 :(得分:0)

我不确定我是否完全理解这个问题,但你可能最好制作一个所有子节点的列表,并使用不同的函数来比较列表中的每个元素,使用任何所需的标准:

node_list = list()
for n1 in idNodes:
    node_list.append(n1.attrib['idName'])
x = 1
for idName in node_list:
    for idName2 in node_list[x:]
        result = compare_nodes(idName, idName2)
        x += 1