我正在读取数百个 XML 文件并使用 xml.etree.ElementTree 解析它们。
快速背景:
这些 XML 文件在某一时刻是完全有效的,但不知何故,在历史上处理它们时,我复制/粘贴它们的过程可能已损坏它们。 (事实证明,这是一个冲洗问题/声明未结束,如果您关心,请参阅我在该调查中获得的良好帮助......Python Shutil Copyfile - 缺少最后几行 https://stackoverflow.com/questions/31546902/python-shutil-copyfile-missing-last-few-lines ).
无论如何,回到这个问题的重点。
我仍然想阅读这些文档的前 100,000 行左右,它们是有效的 XML。这些文件仅缺少 6MB 文件的最后 4 或 5KB。不过,正如前面提到的,该文件只是“剪切”了。它看起来像这样:
</Maintag>
<Maintag>
<Change_type>NQ</Change_type>
<Name>Atlas</Name>
<Test>ATLS</Test>
<Other>NYSE</Other>
<Scheduled_E
其中(也许很明显)Scheduled_E 应该是另一个属性 <.scheduled_event> 的开头。但文件的中间标签被缩短。再一次,在文件中的这一点之前,我想读入数千个“好”“Maintag”条目,接受截止条目(以及显然应该在之后出现的任何内容)作为不可恢复的失败。
处理这个问题的一个简单但不完整的方法可能是简单地 - 预 XML 处理 - 查找文件中字符串 <.> 的最后一个实例,并将后面的内容(在某些时候会被破坏)替换为“开始”标签。同样,这至少让我可以处理仍然存在且有效的内容。
如果有人想帮助我进行这种字符串替换,那么 fwiw 的开始标签是:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<FirstTag>
<Source FileName="myfile">
我希望比这更容易,可能有一个 elementtree 或 beautifulsoup 或其他方式来处理这种情况......我已经做了相当多的搜索,但没有什么看起来是容易/明显的。
Thanks