我需要解析一个包含各种 XML 文件的文件,即
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/