我是 xml 和 python 的新手,我希望我能正确表达我的问题:
我有大小为 1 GB 的 xml 文件。文件如下所示:
<test name="LongTestname" result="PASS">
<step ID="0" step="NameOfStep1" result="PASS">
Stuff I dont't care about
</step>
<step ID="1" step="NameOfStep2" result="PASS">
Stuff I dont't care about
</step>
</test>
为了快速分析,我想获取作为根元素子元素的步骤的名称和结果。我不关心的是很多嵌套元素。
我已经尝试过以下操作:
tree = ET.parse(xmlLocation)
root = tree.getroot()
for child in root:
print(child.tag, child.attrib)
在这里我得到一个内存错误,因为文件太大了
然后我尝试了:
try:
for event, elem in ET.iterparse(pathToSteps, events=("start","end")):
if elem.tag == "step" and event == "start":
stepAndResult.append([elem.attrib['step'],elem.attrib['result'],"System1"])
elem.clear()
这有效,但真的很慢。我猜它会遍历所有元素,这需要很长时间。
然后我找到了一个看起来像这样的解决方案:
try:
tree = ET.iterparse(pathToSteps, events=("start","end"))
_, root = next(tree)
print('ROOT:', root.tag)
except:
print("ERROR: Unable to open and parse file !!!")
for child in root:
print(child.attrib)
但这仅打印第一步的属性。
有没有办法加快工作解决方案?由于我对这些东西很陌生,我希望有一个完整的示例或参考,我可以通过一个示例自己弄清楚。