iterparseの一般的な使用法(およびJF Sebastianによる回答)について尋ねた質問に続いて、 nessusXML結果ファイルを解析するようにコードを再編成します。前の質問から引用すると、ファイル構造は次のとおりです。
<ReportHost host="host1">
<ReportItem id="100">
<foo>9.3</foo>
<bar>hello</bar>
</ReportItem>
<ReportItem id="200">
<foo>10.0</foo>
<bar>world</bar>
</ReportHost>
<ReportHost host="host2">
...
</ReportHost>
言い換えれば、多くのホスト(ReportHost
)は、レポートする項目()が多くReportItem
、後者はいくつかの特性(foo
、bar
)を持っています。アイテムごとに1つの行を生成することを検討します。その特徴は次のとおりです。
host1,id="100",foo="9.3",bar="hello"
host1,id="200"foo="10.0",bar="world"
host2,...
XMLファイルから特定のファイルを抽出する方法を理解しています(これは本質的に私の前の質問に対する答えです)。これらの抽出されたフィールドをコンテキスト内に保持する必要があります(=どちらに関連しているかを知る必要がありReportHost
ますReportItem
)。ReportHost
私のアイデアは、マーカーを使用することでした。これは、私がブロック内にいるのかブロック内にいるのかを教えてくれる変数でありReportItem
、そこから決定します(if inReportHost: ...
)-ただし、これが反復解析でXMLをナビゲートする適切な方法ではないのではないかと心配しています。
それを参照する「ベストプラクティス」ドキュメントはありますか?
編集:コメントに続く改善された例