Python 3: невозможно преобразовать XML в dict с помощью xmltodict - PullRequest
1 голос
/ 28 июня 2019

Я пытаюсь преобразовать данные из XML-файла в python dict, но не могу этого сделать.Ниже приведен код, который я пишу.

import xmltodict
input_xml  = 'data.xml'  # This is the source file

with open(input_xml, encoding='utf-8', errors='ignore') as _file:
    data = _file.read()
    data = xmltodict.parse(data,'ASCII')
    print(data)
    exit()

При выполнении этого кода я получаю следующую ошибку:
xml.parsers.expat.ExpatError: not well-formed (invalid token): line 239, column 40.
После нескольких обращений и испытаний я понял, что в моем xml есть некоторые символы на языке хинди,внутри определенного тега, как показано ниже

<DECL>!! आप की सेवा में पुनः पधारे !!</DECL>

Как я могу игнорировать эти незакодированные символы перед запуском xmltodict.parse?

1 Ответ

0 голосов
/ 28 июня 2019

Я думаю, что проблема связана с кодировкой файла, который вы читаете. Почему вы пытаетесь разобрать его с ASCII ??

Если вы попытаетесь прочитать тот же XML из строки Python без ASCII, все должно работать нормально:

import xmltodict
xml = """<DECL>!! आप की सेवा में पुनः पधारे !!</DECL>"""
xmltodict.parse(xml, process_namespaces=True)

Результат:

OrderedDict([('DECL', '!! आप की सेवा में पुनः पधारे !!')]) 

Используя файл с этой единственной строкой ввода, я могу правильно проанализировать его с помощью:

import xmltodict
input_xml  = 'tmp.txt'  # This is the source file

with open(input_xml, encoding='utf-8', mode='r') as _file:
    data = _file.read()
    data = xmltodict.parse(data)
    print(data)

Скорее всего, проблема в том, что вы пытаетесь разобрать его как "ASCII".

...