gpt4 book ai didi

python - 通过 lxml.etree.iterparse 解析单个文件中的多个 XML 声明

转载 作者:数据小太阳 更新时间:2023-10-29 02:09:23 26 4
gpt4 key购买 nike

我需要解析一个包含各种 XML 文件的文件,即 .. 等等。使用 etree.iterparse 时,出现以下(正确的)错误:

lxml.etree.XMLSyntaxError: XML declaration allowed only at the start of the document

现在,我可以预处理输入文件并为每个包含的 XML 文件生成一个单独的文件。这可能是最简单的解决方案。但我想知道是否存在针对此“问题”的适当解决方案。

谢谢!

最佳答案

您提供的样本数据表明存在一个问题,而您提供的问题和异常则表明存在另一个问题。您是否有多个 XML 文档连接在一起,每个文档都有自己的 XML 声明,或者您是否有一个包含多个顶级元素的 XML 片段?

如果是前者,那么解决方案将涉及将输入流分成多个流,然后分别解析每个流。正如一条评论所暗示的那样,这并不一定意味着实现 XML 解析器。您可以在字符串中搜索 XML 声明,而无需解析其中的任何其他内容,只要您的输入不包括包含未转义 XML 声明的 CDATA 部分。您可以编写一个类似文件的对象,它从底层流返回字符,直到它遇到 XML 声明,然后将它包装在一个生成器函数中,该函数在到达 EOF 之前一直返回流。这不是微不足道的,但也不是非常困难。

如果您有一个包含多个顶级元素的 XML 片段,您可以将它们包装成一个 XML 元素并解析整个元素。

当然,对于涉及错误 XML 输入的大多数问题,最简单的解决方案可能只是修复产生错误输入的问题。

关于python - 通过 lxml.etree.iterparse 解析单个文件中的多个 XML 声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5651219/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com