という要素を持つ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(), [])