我有一个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)
我的问题是我不知道我什么时候完成了一个节点,我应该删除一定程度的嵌套。我认为这是一个相当常见的情况,但我找不到任何解析这样的文件的例子。也许我完全错了。
答案 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(), [])