当前位置: 首页 > 知识库问答 >
问题:

是否有方法恢复无效Char值的迭代解析?

班承德
2023-03-14

我正在使用lxml的iterparse解析一些大的XML文件(3-5Gig)。由于其中一些文件具有无效字符alxml。埃特里。将抛出XMLSyntaxError

当使用lxml时。埃特里。parse I可以提供一个解析器,用于恢复无效字符:

parser = lxml.etree.XMLParser(recover=True)
root = lxml.etree.parse(open("myMalformed.xml, parser)

有没有办法让iterparse获得相同的功能?

编辑:编码不是这里的问题。这些XML文件中存在无效的字符,可以通过定义一个具有恢复=True的XMLParser来清理这些字符。因为我需要为此使用迭代解析,所以我不能使用自定义解析器。因此,我正在寻找上面的代码片段中提供的功能:

context = etree.iterparse(open("myMalformed.xml", events=('end',), tag="Foo") <-- cant recover

共有1个答案

楚德辉
2023-03-14

当你说无效字符时,你是指unicode字符吗?如果是这样,你可以试试

lxml.etree.XMLParser(encoding='UTF-8', recover=True)

如果你指的是格式错误的XML,那么这显然是行不通的。如果您可以发布您的追溯,我们可以看到的性质的XMLSynTaxError这将提供更多的信息。

 类似资料:
  • 问题内容: 内容: 我想说的是: 问题答案: 一种方法是手动处理此问题: 使用包装(扩展) 只要设置了值,就保留()线程和值 或者,通过一些反射(和),您可以: 呼叫 调用(针对上述每个线程) 呼叫 第一是更优选的。

  • 我有很多图像在绘制,我希望放入一个数组。手动将它们放入数组会花费太长的时间和代码。我想知道是否有一种方法来循环,如下所示:

  • 问题内容: 我需要检查映射是否包含列表中的任何键,如果包含,则返回第一个匹配值。想到的幼稚方法是在两个嵌套循环中进行: 有没有一种更好,更有效的方法,可能是一种依靠Java标准库的方法? 问题答案: 当然是这样的: 上面每个候选键仅执行 一次 映射查找。它避免了对存在性与提取进行单独的测试,因为提取不存在的密钥只会给您一个null。注意(感谢 Slanec ),对于此解决方案,有效密钥的null值

  • 如何检查字典是否为空?更具体地说,我的程序从字典中的某个键开始,我有一个循环,循环迭代直到字典中有键为止。整体上algo是这样的: 从Dict中的某个键开始 当Dict中有键时 对Dict中的第一个键执行某些操作 删除第一个键 请注意,上面循环中的可能会向字典中添加新键。我尝试了中的值 但在while循环中添加了一些新键,因此它会失败。

  • 我的方法取得了90%的成功,但当响应在一个子键中有多个条目时,逻辑就会失败,我无法将一个通用逻辑放在适当的位置,该逻辑将在所有情况下运行。 响应样本为 现在,我的用例说您搜索John文本,然后items数组将包含许多对象,这些对象的项是。名称或项目。部分。说明应包含“John”关键字 我放置的匹配逻辑运行良好,因为我正在迭代项[]。名称和项目。第[]节。描述 主要的挑战来自于[*]节。说明包含如下