在我提出关于 iterparse 一般用法的问题(以及JF Sebastian的回答)之后,我将重新组织我的代码以解析 nessus XML 结果文件。引用前面的问题,文件结构是
<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
)。我将着眼于为每个项目生成一行,其特点是:
host1,id="100",foo="9.3",bar="hello"
host1,id="200"foo="10.0",bar="world"
host2,...
我了解如何从 XML 文件中提取给定的文件(这实质上是我之前问题的答案)。我需要将这些提取的字段保留在上下文中(= 我需要知道它们ReportHost
与哪些ReportItem
相关)。我的想法是使用一个标记,一个变量会告诉我我是在 aReportHost
还是ReportItem
block 中并从那里决定 ( if inReportHost: ...
) - 不过,我担心这不是使用 iterparse 导航 XML 的正确方法。
是否有“最佳实践”文件可以参考?
编辑:改进后的评论示例