我正在尝试解析一个非常大的XML文件并执行小写并删除标点符号。
问题是,当我尝试使用cET parse function
解析大文件时,在某些时候它会遇到格式错误的标记或字符,引发syntax error
:
SyntaxError: not well-formed (invalid token): line 639337, column 4
注意:我几乎不可能阅读文件,所以我看不出问题所在。
如何跳过或解决此问题?
from xml.etree import cElementTree as cET
for event, elem in cET.iterparse(xmlFile, events=("start", "end")):
...do something...
答案 0 :(得分:4)
使用lxml
代替标准库ElementTree
;它支持相同的API,但可以处理损坏的XML;如果可能的话,它会尝试修复它:
parser = etree.XMLParser(recover=True)
context = etree.iterparse(filename, parser)
答案 1 :(得分:0)
您可以使用xmllint
之类的工具来验证和清理XML。此工具报告的错误应该可以帮助您修复XML文件。
编辑一个例子:
$ cat invalid.xml
<?xml version="1.0"?>
<foo>
<bar>
</foo>
$ xmllint invalid.xml
invalid.xml:4: parser error : Opening and ending tag mismatch: bar line 3 and foo
</foo>
^
invalid.xml:5: parser error : Premature end of data in tag foo line 2
^