我正在尝试使用 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/