/ ElementTreeを使用したネストされた無制限のXMLフィールドの解析/解析 - python、xml、elementtree

ElementTreeを使ってネストされた無限のXMLフィールドを解析する - python、xml、elementtree

という要素を持つXMLファイルがあります。"ノード"。これらは任意の深さにネストすることができ、ネストの深さは私にはわかりません。ファイルを解析してネスティングを保存する必要があります。たとえば、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は1

私はこれを理解することができました。基本的に私はこれをしました:

  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(), [])