gpt4 book ai didi

Python lxml错误 "namespace not defined."

转载 作者:太空宇宙 更新时间:2023-11-03 16:48:40 25 4
gpt4 key购买 nike

我被一些奇怪的 xml 逼疯了,如果有一些指点,我将不胜感激:

文档定义如下:

<sphinx:document id="18059090929806848187">
<url>http://www.some-website.com</url>
<page_number>104</page_number>
<size>7865</size>
</sphinx:document>

现在,我需要读取大量文件(其中 500m+ 这些文件都是 gz 压缩的)并从一些包含的标签中获取文本值。

示例代码:

from lxml import objectify, etree
import gzip

with open ('file_list','rb') as file_list:
for file in file_list:
in_xml = gzip.open(file.strip('\n'))
xml2 = etree.iterparse(in_xml)
for action, elem in xml2:
if elem.tag == "page_number":
print elem.text + str(file)

返回第一个值 elem.text,但仅针对列表中的第一个文件,并很快出现错误:

lxml.etree.XMLSyntaxError:文档上的命名空间前缀 sphinx 未定义,第 1 行,第 20 列

请原谅我的无知,但 xml 确实让我很头疼,我已经为此苦苦挣扎了一段时间。有没有办法可以定义 namespace 前缀或以其他更智能的方式处理此问题?

谢谢

最佳答案

您的输入文件不是格式正确的 XML。我假设它是来自较大 XML 文档的片段。

您的选择是:

  • 重建较大的文档。如何执行此操作取决于您的应用程序。您可能需要咨询创建您正在解析的文件的人员。

  • 尽管有错误,仍解析该文件。为此,请使用 lxml.etree.iterparse 中的 recover 关键字:

    xml2 =etree.iterparse(in_xml, recover=True)

关于Python lxml错误 "namespace not defined.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36085774/

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