使用ElementTree解析嵌套的无界XML字段

时间:2013-11-25 21:39:31

标签: python xml elementtree

我有一个XML文件,其中包含一个名为“Node”的元素。这些可以嵌套到任何深度,嵌套的深度是我不知道的。我需要解析文件并保留嵌套。例如,如果XML文件具有:

<Node Name="A">
   <Node Name="B">
      <Node Name="C">
        <Node Name="D">
          <Node Name="E">

当我解析节点“E”时,我需要知道我在A / B / C / D / E中。问题是我不知道这有多深。这是我到目前为止的代码:

nodes = []

def parseChild(c):
    if c.tag == 'Node':
        if 'Name' in c.attrib: 
            nodes.append(c.attrib['Name'])
        for c1 in c:
            parseChild(c1)
    else:
        for node in nodes:
            print node,
        print c.tag

for parent in tree.getiterator():
    for child in parent:
        for x in child:
            parseChild(x)

我的问题是我不知道我什么时候完成了一个节点,我应该删除一定程度的嵌套。我认为这是一个相当常见的情况,但我找不到任何解析这样的文件的例子。也许我完全错了。

1 个答案:

答案 0 :(得分:1)

在python列表的帮助下,我能够解决这个问题。基本上我这样做了:

  nodes = []

  def process_subtree(c, path):
      name = c.get('Name') if c.tag == 'Node' else None
      if name:
          path.append(name)
          nodes.append('/'.join(path))

      for c1 in c:
          process_subtree(c1, path)

      if name:
          path.pop()

  process_subtree(tree.getroot(), [])