python - 如何使用 ElementTree (python) 解析 xml 时删除无效字符

标签 python xml encoding elementtree

我正在尝试使用 python(特别是 ElementTree)将大约 15,000 个 xml 文件的文件夹导入到 mongo 数据库中。 大约 5% 的文件中似乎存在无效字符,其中大部分是 &。文档编码为“ISO-8859-1”,编码在 xml 文件中声明。

是否有内置方法可以省略字符或自动将其转换为有效的内容?

这是我迄今为止使用的代码:

    from pymongo import MongoClient
    import xml.etree.ElementTree as ET
    import os
    import sys


    def get_files(d):
            return [os.path.join(d, f) for f in os.listdir(d) if os.path.isfile(os.path.join(d,f))]

    files = get_files("/path/to/data")

    xmls = []
    for file in files:
        tree = ET.parse(file)
                root = tree.getroot()
        xmls.append(root)


    #Results in:
    In [113]: xmls = []
         ...: for file in files:
         ...:     tree = ET.parse(file)
         ...:     root = tree.getroot()
         ...:     xmls.append(root)
      File "<string>", line unknown
    ParseError: not well-formed (invalid token): line 223, column 74

果然,接下来要解析的文档第223行第74列有一个&。

最佳答案

为了结束,这是我的做法:

我没有使用 ElementTree,而是使用了 lxml 及其恢复选项:

for file in files:
    parser = etree.XMLParser(ns_clean=True, recover = True)
    tree = etree.parse(file, parser=parser)
    root = tree.getroot()
    xmls.append(root)

这并不能解决根本问题,但足以完成手头的任务。

关于python - 如何使用 ElementTree (python) 解析 xml 时删除无效字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24060537/

相关文章:

php - PHP和MySQL的utf-8编码的字符串问题?

swift - 将图像编码为 base64 时的字符串无效 - Swift 4

android - 如何在 Android 中签署 XML 文档或验证 XML 文档签名

XML::复杂散列的简单输出元素顺序

android - 基维 Android : write public files

python - 如何在 tensorflow 中对二维数组应用 unique_with_counts

java - 使用整数数组 Android 获取布局

python - 在自定义 python 函数中发现 TypeError : expected bytes, str

python - 无法在 Python 中的 gzip 文件中执行基于正则表达式的操作

python - 如何用Python去除图像中的小物体