PythonでXMLファイルをパースする際、xml.parsers.expat.ExpatError: not well-formed (invalid token)
というエラーが発生することがあります。このエラーは、パースしようとしている文字列に無効な文字が含まれている場合に発生します。
この問題を解決する一つの方法は、lxml
モジュールのXMLParser
クラスを使用し、recover=True
を設定することでエラーを無視することです。
from lxml import etree
parser = etree.XMLParser(recover=True)
etree.fromstring(xmlstring, parser=parser)
また、xmltodict
を使用してXMLファイルをロードする際に同様のエラーが発生する場合があります。この場合、エンコーディングタイプを明示的に指定することで問題を解決できることがあります。
import xmltodict
with open('fileTEST.xml', encoding='utf8') as fd:
xmltodict.parse(fd.read())
これらの方法を試しても問題が解決しない場合は、ファイルがByte Order Mark(BOM)付きで保存されている可能性があります。この場合、ファイルをBOMなしのプレーンなutf8で再保存することで問題が解決することがあります。
以上の方法を試しても問題が解決しない場合は、XMLファイルの内容を確認し、無効な文字やエンティティ参照がないか確認してみてください。特に、&
や'
などの特殊文字がエンティティ参照されずに使用されている場合、パースエラーが発生することがあります。
以上、PythonでXMLパーサーが無効なトークンを無視する方法についての記事でした。この情報が皆さんの問題解決に役立つことを願っています。