Python xml.dom.minidom.parse и utf-8 xml файл с кириллицей - PullRequest
2 голосов
/ 09 апреля 2011

извините за мой английский:)

У меня проблема с разбором xml-файла в utf-8 с кириллическим текстом в содержимом

некоторые строки из xml:

............

<programme start="20110405022000 +0300"
stop="20110405031000 +0300" channel="4000"> <title
lang="bul">Модерно</title> <sub-title
lang="bul"></sub-title> <desc
lang="bul">Тоук шоу. Модерно е токшоу
с водещ и продуцент Радост Драганова.
Предаването разисква всички теми,
които интересуват жените, като им
помага да изглеждат по-добре и да се
чувстват по-добре</desc> <category
lang="bul">0</category> </programme>
<programme start="20110405031000 +0300"
stop="20110405050000 +0300" channel="4000"> <title
lang="bul">Клонинг</title> <sub-title
lang="bul"></sub-title> <desc
lang="bul">Еп. 89 и 90, сериал.
Любовта между Хаде и Лукас се ражда в
Мароко, където двамата се запознават.
Но мюсюлманските обичаи разделят
влюбените. Хаде е родена и израснала в
САЩ, но след смъртта на майка си
заминава за Мароко при чичо си
Али</desc> <category
lang="bul">0</category> </programme>

............

Я использую DOMTree = xml.dom.minidom.parse ("text.xml") и получаю ошибку:

Traceback (most recent call last):
  File "t3.py", line 9, in <module>
    DOMTree = parse(datasource)
  File "/usr/lib/python2.6/xml/dom/minidom.py", line 1918, in parse
    return expatbuilder.parse(file)
  File "/usr/lib/python2.6/xml/dom/expatbuilder.py", line 928, in parse
    result = builder.parseFile(file)
  File "/usr/lib/python2.6/xml/dom/expatbuilder.py", line 207, in parseFile
    parser.Parse(buffer, 0)
xml.parsers.expat.ExpatError: not well-formed (invalid token): line 10, column 18

строка 10, столбец 18 - первый символ кириллицы.в XML-файле первая строка

<?xml version="1.0" encoding="utf-8"?>

Есть идеи?

Ответы [ 3 ]

1 голос
/ 10 апреля 2011

Вы говорите "" "Если я изменю кодировку в первой строке на koi8-r, это сработает. Но я хочу работать с utf-8." ""

Я предполагаю, что вы имеете в виду, что это работает, если файл XML начинается с

<?xml version="1.0" encoding="KOI8-R" ?>

Если это правда, то ваш файл закодирован в KOI8-R.

Если вы хотите работать с входными файлами UTF-8, то вам НЕ следует кодировать свои файлы в KOI8-R, или вам следует перекодировать файл (ы) из KOI8-R в UTF-8.

Если «я хочу работать с utf-8» означает что-то еще, пожалуйста, объясните.

1 голос
/ 11 мая 2011

Я бы предложил использовать chardet. следующий код может помочь. У меня есть данные XML как GB3212. Я использовал chardet просто, чтобы конвертировать мой источник в utf-8. Надеюсь, это поможет.

xml_data_type = chardet.detect (xml_data_source) ['encoding']

print xml_data_type '' 'проверьте вашу кодировку' ''

xml_data = xml_data.decode (xml_data_encoding)

xml_data = xml.data.encode ("utf-8")

1 голос
/ 09 апреля 2011

Ваш xml-файл должен быть правильно сформирован, то есть он должен иметь только один корневой элемент. Попробуйте добавить корневые теги в начале и конце вашего входного файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...