XMLファイルを解析し、データからレコードベースの出力を構築する必要があります。問題は、XMLがある種のデータ構造を表すいくつかのレベルのネストされた「ノード」要素を持つという点で、XMLが「汎用」形式であることです。私はレコードを "ノード"要素の最も深いレベルに基づいて動的に構築する必要があります。 XMLと期待される出力の例が一番下にあります。Python XML - 動的なネストされた「ノード」要素からフラットレコードを作成する
私はPythonのElementTreeに最も慣れているので、それを使用したいと思いますが、ダイナミックノードの深さに基づいて出力レコードを動的に構築する方法で私の頭を包むことはできません。また、ネストされたノードがxレベルの深さになるとは仮定できません。したがって、ループごとに各レベルをハードコーディングすることはできません。 XMLを解析し、その場で出力を構築する方法はありますか?
いくつかの追加の注意事項:
- ノード名は、すべての親と詳細情報(率、価格、など)
- ノードの深さは静的ではありませんを除いて「ノード」です。したがって、サンプルに表示されているレベルよりもさらに高いレベルを仮定します。
- 各 "レベル"は複数のサブレベルを持つことができます。したがって、各レコードを適切に構築するには、各子「ノード」にループする必要があります。
どのようなアイデアや入力をいただければ幸いです。
<root>
<node>101
<node>A
<node>PlanA
<node>default
<rate>100.00</rate>
</node>
<node>alternative
<rate>90.00</rate>
</node>
</node>
</node>
</node>
<node>102
<node>B
<node>PlanZZ
<node>Group 1
<node>default
<rate>100.00</rate>
</node>
<node>alternative
<rate>90.00</rate>
</node>
</node>
<node>Group 2
<node>Suba
<node>default
<rate>1.00</rate>
</node>
<node>alternative
<rate>88.00</rate>
</node>
</node>
<node>Subb
<node>default
<rate>200.00</rate>
</node>
<node>alternative
<rate>4.00</rate>
</node>
</node>
</node>
</node>
</node>
</node>
</root>
出力は次のようになります。あなたは、XPathを持つ要素ツリーfind
方法を持っている理由
SRV SUB PLAN Group SubGrp DefRate AltRate
101 A PlanA 100 90
102 B PlanB Group1 100 90
102 B PlanB Group2 Suba 1 88
102 B PlanB Group2 Subb 200 4
お返事ありがとうございます。ノード名はすべて「ノード」であり、前に述べたように残念なことに「サブグループ」が最後のレベルであるとは思いません。そうでないと非常に簡単です。ノードの深さは静的ではありません。サブグループ「ノード」の子が存在する可能性があります。思考?再度、感謝します! – John
また、各 "レベル"は複数のサブレベルを持つことができます。したがって、トップノードのループからただ一つのオブジェクトを作成することはできません。それぞれの子「ノード」もループして各レコードを構築する必要があります。 – John
@ S.Lott - 私はXML構造についてもっとは同意できませんでしたが、残念ながら "システム生成"であり、変更を拒否しています。 :-( – John