xml.parsers.expat — Быстрый парсинг XML с помощью Expat


Предупреждение

Модуль pyexpat не защищен от вредоносных данных. Если вам нужно парсить ненадежные или неаутентифицированные данные, см. Уязвимости XML.

Модуль xml.parsers.expat представляет собой интерфейс Python для непроверяющего парсера XML Expat. Модуль предоставляет единственный тип расширения, xmlparser, который представляет текущее состояние парсера XML. После создания объекта xmlparser различные атрибуты объекта могут быть установлены в функции обработчика. Когда XML-документ затем передаётся парсеру, функции обработчика вызываются для символьных данных и разметки в XML-документе.

Данный модуль использует модуль pyexpat для предоставления доступа к парсеру Expat. Прямое использование модуля pyexpat не рекомендуется.

Данный модуль предоставляет одно исключение и один объект типа:

exception xml.parsers.expat.ExpatError

Исключение вызывается, когда Expat сообщает об ошибке. См. раздел Исключения ExpatError для получения дополнительной информации об интерпретации ошибок Expat.

exception xml.parsers.expat.error

Псевдоним для ExpatError.

xml.parsers.expat.XMLParserType

Тип возвращаемых значений функцией ParserCreate().

Модуль xml.parsers.expat содержит две функции:

xml.parsers.expat.ErrorString(errno)

Возвращает поясняющую строку для заданного номера ошибки errno.

xml.parsers.expat.ParserCreate(encoding=None, namespace_separator=None)

Создаёт и возвращает новый объект xmlparser. encoding, если он указан, должен быть строкой, обозначающей кодировку, используемую данными XML. Expat не поддерживает столько кодировок, сколько Python, и его репертуар кодировок не может быть расширен; он поддерживает UTF-8, UTF-16, ISO-8859-1 (Latin1) и ASCII. Если задан encoding [1], он переопределит явное или неявное кодирование документа.

Expat может при желании выполнять обработку пространства имён XML для вас, что можно сделать, указав значение для namespace_separator. Значение должно быть строкой из одного символа; ValueError будет вызван, если строка имеет недопустимую длину (None считается тем же, что и опущение). Когда обработка пространства имён включена, имена типов элементов и имена атрибутов, принадлежащие пространству имён, будут расширены. Имя элемента, переданное обработчикам элементов StartElementHandler и EndElementHandler, будет конкатенацией URI пространства имён, символа-разделителя пространства имён и локальной части имени. Если разделителем пространства имён является нулевой байт (chr(0)), то URI пространства имён и локальная часть будут объединены без какого-либо разделителя.

Например, если для namespace_separator задан пробел (' ') и анализируется следующий документ:

<?xml version="1.0"?>
<root xmlns    = "http://default-namespace.int/"
      xmlns:py = "http://digitology.tech/ns/">
  <py:elem1 />
  <elem2 xmlns="" />
</root>

StartElementHandler получит следующие строки для каждого элемента:

http://default-namespace.int/ root
http://digitology.tech/ns/ elem1
elem2

Из-за ограничений библиотеки Expat, используемой pyexpat, возвращённый экземпляр xmlparser можно использовать только для парсинга одного XML-документа. Вызвать ParserCreate для каждого документа, чтобы предоставить уникальные экземпляры парсера.

См.также

Парсер XML expat
Домашняя страница проекта Expat.

Объекты XMLParser

Объекты xmlparser имеют следующие методы:

xmlparser.Parse(data[, isfinal])

Парсит содержимое строки data, вызывая соответствующие функции обработчика для обработки распарсенных данных. isfinal должен быть истинным при последнем вызове этого метода; он позволяет парсить один файл фрагментами, а не отправлять несколько файлов. data может быть пустой строкой в любое время.

xmlparser.ParseFile(file)

Распарсить чтение данных XML из объекта file. file должен предоставить только метод read(nbytes), возвращающий пустую строку, когда данных больше нет.

xmlparser.SetBase(base)

Задаёт базу, которая будет использоваться для разрешения относительных URI в системных идентификаторах в объявлениях. Разрешение относительных идентификаторов остаётся за приложением: это значение будет передано в качестве аргумента base функциям ExternalEntityRefHandler(), NotationDeclHandler() и UnparsedEntityDeclHandler().

xmlparser.GetBase()

Возвращает строку, содержащую базу, установленную предыдущим вызовом SetBase(), или None, если SetBase() не вызывался.

xmlparser.GetInputContext()

Возвращает входные данные, сгенерировавшие текущее событие, в виде строки. Данные находятся в кодировке объекта, который содержит текст. При вызове, когда обработчик событий не активен, возвращается значение None.

xmlparser.ExternalEntityParserCreate(context[, encoding])

Создаёт «дочерний» парсер, который можно использовать для парсинга внешнего анализируемого объекта, на который ссылается содержимое, проанализированное родительским парсером. Параметр context должен быть строкой, передаваемой функции-обработчику ExternalEntityRefHandler(), описанной далее. Дочерний парсер создаётся со значениями ordered_attributes и specified_attributes, установленными на значения этого парсера.

xmlparser.SetParamEntityParsing(flag)

Управление парсером объектов параметров (включая подмножество внешнего DTD). Возможные значения flag: XML_PARAM_ENTITY_PARSING_NEVER, XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE и XML_PARAM_ENTITY_PARSING_ALWAYS. Возвращает истина, если установка флага прошла успешно.

xmlparser.UseForeignDTD([flag])

Вызов этого с истинным значением для flag (по умолчанию) заставит Expat вызывать ExternalEntityRefHandler с None для всех аргументов, чтобы разрешить загрузку альтернативного DTD. Если документ не содержит объявления типа документа, ExternalEntityRefHandler все равно будет вызываться, но StartDoctypeDeclHandler и EndDoctypeDeclHandler вызываться не будут.

Передача ложного значения для flag отменит предыдущий вызов, который передал истинное значение, но в остальном не имеет никакого эффекта.

Данный метод можно вызывать только до вызова методов Parse() или ParseFile(); вызов его после того, как любой из них был вызван, вызывает ExpatError с атрибутом code, установленным на errors.codes[errors.XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING].

Объекты xmlparser имеют следующие атрибуты:

xmlparser.buffer_size

Размер используемого буфера, когда значение buffer_text истинно. Новый размер буфера можно задать, присвоив этому атрибуту новое целочисленное значение. При изменении размера буфер очищается.

xmlparser.buffer_text

Установка этого параметра в значение истина приводит к тому, что объект xmlparser буферизует текстовое содержимое, возвращаемое Expat, чтобы по возможности избежать множественных вызовов обратного вызова CharacterDataHandler(). Это может существенно повысить производительность, поскольку Expat обычно разбивает символьные данные на фрагменты в конце каждой строки. Данный атрибут по умолчанию имеет значение ложь и может быть изменён в любое время.

xmlparser.buffer_used

Если buffer_text включён, количество байтов, хранящихся в буфере. Данные байты представляют текст в кодировке UTF-8. Данный атрибут не имеет осмысленной интерпретации, если buffer_text имеет значение ложь.

xmlparser.ordered_attributes

Установка для этого атрибута ненулевого целого числа приводит к тому, что атрибуты представляются в виде списка, а не словаря. Атрибуты представлены в том порядке, в котором они находятся в тексте документа. Для каждого атрибута представлены две записи списка: имя атрибута и значение атрибута. (В более ранних версиях этого модуля также использовался данный формат.) По умолчанию данный атрибут имеет значение ложь; его можно изменяет в любое время.

xmlparser.specified_attributes

Если установлено ненулевое целое число, парсер сообщит только о тех атрибутах, которые были указаны в экземпляре документа, а не о тех, которые были получены из объявлений атрибутов. Приложения, которые устанавливают это, должны быть особенно осторожны, чтобы использовать дополнительную информацию, доступную из объявлений, по мере необходимости, чтобы соответствовать стандартам поведения XML-процессоров. По умолчанию данный атрибут имеет значение ложь; его можно изменяет в любое время.

Следующие атрибуты содержат значения, относящиеся к самой последней ошибке, обнаруженной объектом xmlparser, и будут иметь правильные значения только после того, как вызов Parse() или ParseFile() вызовет исключение xml.parsers.expat.ExpatError.

xmlparser.ErrorByteIndex

Индекс байта, в котором произошла ошибка.

xmlparser.ErrorCode

Числовой код, определяющий проблему. Это значение можно передать функции ErrorString() или сравнивает с одной из констант, определённых в объекте errors.

xmlparser.ErrorColumnNumber

Номер столбца, в котором произошла ошибка.

xmlparser.ErrorLineNumber

Номер строки, в которой произошла ошибка.

Следующие атрибуты содержат значения, относящиеся к текущему местоположению парсинга в объекте xmlparser. Во время обратного вызова, сообщающего о событии парсинга, они указывают местоположение первого из последовательности символов, сгенерировавшей событие. При вызове вне обратного вызова указанная позиция будет сразу после последнего события парсинга (независимо от того, был ли связанный обратный вызов).

xmlparser.CurrentByteIndex

Текущий индекс байта во входных данных парсера.

xmlparser.CurrentColumnNumber

Текущий номер столбца во входных данных парсера.

xmlparser.CurrentLineNumber

Текущий номер строки во входных данных парсера.

Вот список обработчиков, которые можно установить. Чтобы установить обработчик для объекта xmlparser o, используйте o.handlername = func. handlername должен быть взят из следующего списка, а func должен быть вызываемым объектом, принимающим правильное количество аргументов. Все аргументы являются строками, если не указано иное.

xmlparser.XmlDeclHandler(version, encoding, standalone)

Вызывается при парсинге объявления XML. Объявление XML — это (необязательное) объявление применимой версии XML-рекомендации, кодировка текста документа и необязательное «автономное» объявление. version и encoding будут строками, а standalone будет 1, если документ объявлен автономным, 0, если он объявлен неавтономным, или -1, если отдельное предложение было пропущено. Это доступно только в Expat версии 1.95.0 или новее.

xmlparser.StartDoctypeDeclHandler(doctypeName, systemId, publicId, has_internal_subset)

Вызывается, когда Expat начинает парсинг объявления типа документа (<!DOCTYPE ...). doctypeName предоставляется точно в том виде, в котором он представлен. Параметры systemId и publicId дают системный и общедоступный идентификаторы, если они указаны, или None, если они не указаны. has_internal_subset будет иметь значение истина, если документ содержит подмножество объявлений внутреннего документа. Для этого требуется Expat версии 1.2 или новее.

xmlparser.EndDoctypeDeclHandler()

Вызывается, когда Expat завершает парсинг объявления типа документа. Для этого требуется Expat версии 1.2 или новее.

xmlparser.ElementDeclHandler(name, model)

Вызывается один раз для каждого объявления типа элемента. name — это имя типа элемента, а model — представление модели содержимого.

xmlparser.AttlistDeclHandler(elname, attname, type, default, required)

Вызывается для каждого объявленного атрибута для типа элемента. Если объявление списка атрибутов объявляет три атрибута, данный обработчик вызывается три раза, по одному разу для каждого атрибута. elname — это имя элемента, к которому применяется объявление, а attname — это имя объявленного атрибута. Тип атрибута — строка, переданная как type; возможные значения: 'CDATA', 'ID', 'IDREF', … default предоставляет значение по умолчанию для атрибута, используемого, когда атрибут не указан в экземпляре документа, или None, если значение по умолчанию отсутствует (значения #IMPLIED). Если атрибут должен быть указан в экземпляре документа, required будет истинным. Для этого требуется Expat версии 1.95.0 или новее.

xmlparser.StartElementHandler(name, attributes)

Вызывается для начала каждого элемента. name — это строка, содержащая имя элемента, а attributes — атрибуты элемента. Если ordered_attributes истинно, это список (полное описание см. в ordered_attributes). В противном случае это словарь, отображающий имена в значения.

xmlparser.EndElementHandler(name)

Вызывается в конце каждого элемента.

xmlparser.ProcessingInstructionHandler(target, data)

Вызывается для каждой инструкции обработки.

xmlparser.CharacterDataHandler(data)

Вызывается для данных символа. Это будет вызываться для обычных символьных данных, содержимого с пометкой CDATA и игнорируемых пробелов. Приложения, которые должны различать данные случаи, могут использовать обратные вызовы StartCdataSectionHandler, EndCdataSectionHandler и ElementDeclHandler для сбора необходимой информации.

xmlparser.UnparsedEntityDeclHandler(entityName, base, systemId, publicId, notationName)

Вызывается для неразобранных (NDATA) объявлений сущностей. Это присутствует только в версии 1.2 библиотеки Expat; для более поздних версий используйте EntityDeclHandler. (Базовая функция в библиотеке Expat объявлена устаревшей)

xmlparser.EntityDeclHandler(entityName, is_parameter_entity, value, base, systemId, publicId, notationName)

Вызывается для всех объявлений сущностей. Для параметров и внутренних сущностей value будет строкой, содержащей объявленное содержимое сущности; это будет None для внешних объектов. Параметр notationName будет None для проанализированных сущностей и имя нотации для не проанализированных сущностей. is_parameter_entity будет иметь значение истина, если сущность является параметрической сущностью, или ложь для общих сущностей (большинство приложений должны иметь дело только с общими сущностями). Это доступно только начиная с версии 1.95.0 библиотеки Expat.

xmlparser.NotationDeclHandler(notationName, base, systemId, publicId)

Вызывается для объявлений нотаций. notationName, base и systemId и publicId являются строками, если они заданы. Если общедоступный идентификатор не указан, publicId будет None.

xmlparser.StartNamespaceDeclHandler(prefix, uri)

Вызывается, когда элемент содержит объявление пространства имён. Объявления пространства имён обрабатываются до вызова StartElementHandler для элемента, в котором размещены объявления.

xmlparser.EndNamespaceDeclHandler(prefix)

Вызывается при достижении закрывающего тега для элемента, содержащего объявление пространства имён. Это вызывается один раз для каждого объявления пространства имён для элемента в порядке, обратном порядку, для которого был вызван StartNamespaceDeclHandler, чтобы указывает начало области действия каждого объявления пространства имён. Вызовы этого обработчика выполняются после соответствующего EndElementHandler для конца элемента.

xmlparser.CommentHandler(data)

Позвонил для комментариев. data — это текст комментария, исключая начальный '<!--' и конечный '-->'.

xmlparser.StartCdataSectionHandler()

Вызывается в начале раздела CDATA. Это и EndCdataSectionHandler необходимы для определения синтаксического начала и конца разделов CDATA.

xmlparser.EndCdataSectionHandler()

Вызывается в конце раздела CDATA.

xmlparser.DefaultHandler(data)

Вызывается для любых символов в XML-документе, для которых не указан применимый обработчик. Это означает символы, которые являются частью конструкции, о которой можно было бы сообщить, но для которых не был предоставлен обработчик.

xmlparser.DefaultHandlerExpand(data)

Это то же самое, что и DefaultHandler(), но не препятствует расширению внутренних сущностей. Ссылка на объект не будет передана обработчику по умолчанию.

xmlparser.NotStandaloneHandler()

Вызывается, если XML-документ не был объявлен как отдельный документ. Это происходит, когда имеется внешнее подмножество или ссылка на сущность параметра, но объявление XML не устанавливает автономный yes в объявлении XML. Если данный обработчик вернёт 0, то парсер выдаст ошибку XML_ERROR_NOT_STANDALONE. Если данный обработчик не установлен, парсер не создаёт исключения для этого условия.

xmlparser.ExternalEntityRefHandler(context, base, systemId, publicId)

Требуются ссылки на внешние объекты. base — текущая база, установленная предыдущим вызовом SetBase(). Публичный и системный идентификаторы systemId и publicId являются строками, если они заданы; если общедоступный идентификатор не указан, publicId будет None. Значение context непрозрачно и должно использоваться только так, как приведено далее.

Для парсинга внешних сущностей данный обработчик должен быть реализован. Он отвечает за создание вспомогательного парсера с использованием ExternalEntityParserCreate(context), его инициализацию соответствующими обратными вызовами и парсинг сущности. Данный обработчик должен возвращать целое число; если он вернёт 0, парсер выдаст ошибку XML_ERROR_EXTERNAL_ENTITY_HANDLING, в противном случае парсинг продолжится.

Если данный обработчик не указан, о внешних объектах сообщает обратный вызов DefaultHandler, если он предоставлен.

Исключения ExpatError

Исключения ExpatError имеют ряд интересных атрибутов:

ExpatError.code

Внутренний номер ошибки Expat для конкретной ошибки. Словарь errors.messages сопоставляет данные номера ошибок с сообщениями об ошибках Expat. Например:

from xml.parsers.expat import ParserCreate, ExpatError, errors

p = ParserCreate()
try:
    p.Parse(some_xml_document)
except ExpatError as err:
    print("Error:", errors.messages[err.code])

Модуль errors также предоставляет константы сообщений об ошибках и словарь codes, сопоставляющий данные сообщения обратно с кодами ошибок, см. далее.

ExpatError.lineno

Номер строки, в которой обнаружена ошибка. Первая строка имеет номер 1.

ExpatError.offset

Смещение символа в строке, где произошла ошибка. Первый столбец имеет номер 0.

Пример

Следующая программа определяет три обработчика, которые просто выводят свои аргументы.

import xml.parsers.expat

# 3 функции обработчика
def start_element(name, attrs):
    print('Начальный элемент:', name, attrs)
def end_element(name):
    print('Конечный элемент:', name)
def char_data(data):
    print('Символьные данные:', repr(data))

p = xml.parsers.expat.ParserCreate()

p.StartElementHandler = start_element
p.EndElementHandler = end_element
p.CharacterDataHandler = char_data

p.Parse("""<?xml version="1.0"?>
<parent id="top"><child1 name="paul">Текст идет здесь</child1>
<child2 name="fred">Больше текста</child2>
</parent>""", 1)

Вывод этой программы:

Начальный элемент: parent {'id': 'top'}
Начальный элемент: child1 {'name': 'paul'}
Символьные данные: 'Текст идет здесь'
Конечный элемент: child1
Символьные данные: '\n'
Начальный элемент: child2 {'name': 'fred'}
Символьные данные: 'Больше текста'
Конечный элемент: child2
Символьные данные: '\n'
Конечный элемент: parent

Описания моделей контента

Модели содержимого определяются с помощью вложенных кортежей. Каждый кортеж содержит четыре значения: тип, квантификатор, имя и кортеж дочерних элементов. Дети — это просто дополнительные описания модели контента.

Значения первых двух полей являются константами, определенными в модуле xml.parsers.expat.model. Данные константы могут быть собраны в две группы: группа типов модели и группа квантификаторов.

Константы в группе типа модели:

xml.parsers.expat.model.XML_CTYPE_ANY

Элемент, названный именем модели, был объявлен как имеющий модель содержимого ANY.

xml.parsers.expat.model.XML_CTYPE_CHOICE

Именованный элемент позволяет выбрать один из нескольких вариантов; это используется для моделей содержимого, таких как (A | B | C).

xml.parsers.expat.model.XML_CTYPE_EMPTY

Элементы, объявленные как EMPTY, имеют данный тип модели.

xml.parsers.expat.model.XML_CTYPE_MIXED
xml.parsers.expat.model.XML_CTYPE_NAME
xml.parsers.expat.model.XML_CTYPE_SEQ

Модели, представляющие серию моделей, следующих одна за другой, обозначаются этим типом модели. Это используется для таких моделей, как (A, B, C).

Константы в группе квантификаторов:

xml.parsers.expat.model.XML_CQUANT_NONE

Модификатор не указан, поэтому он может появиться только один раз, как и для A.

xml.parsers.expat.model.XML_CQUANT_OPT

Модель необязательна: может появиться один раз или не появиться вообще, как для A?.

xml.parsers.expat.model.XML_CQUANT_PLUS

Модель должна встречаться один или несколько раз (например, A+).

xml.parsers.expat.model.XML_CQUANT_REP

Модель должна встречаться ноль или более раз, как для A*.

Экспат-константы ошибок

В модуле xml.parsers.expat.errors представлены следующие константы. Данные константы полезны при интерпретации некоторых атрибутов объектов исключения ExpatError, возникающих при возникновении ошибки. Поскольку из соображений обратной совместимости значением констант является ошибка message, а не числовая ошибка code, вы делаете это, сравнивая его атрибут code с errors.codes[errors.XML_ERROR_CONSTANT_NAME].

Модуль errors имеет следующие атрибуты:

xml.parsers.expat.errors.codes

Словарь, сопоставляющий описания строк с их кодами ошибок.

Добавлено в версии 3.2.

xml.parsers.expat.errors.messages

Словарь, отображающий числовые коды ошибок в их строковые описания.

Добавлено в версии 3.2.

xml.parsers.expat.errors.XML_ERROR_ASYNC_ENTITY
xml.parsers.expat.errors.XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF

Ссылка на объект в значении атрибута относится к внешнему объекту, а не к внутреннему объекту.

xml.parsers.expat.errors.XML_ERROR_BAD_CHAR_REF

Ссылка на символ относится к символу, который является недопустимым в XML (например, символ 0 или «&#0;»).

xml.parsers.expat.errors.XML_ERROR_BINARY_ENTITY_REF

Ссылка на объект относится к объекту, который был объявлен с помощью нотации, поэтому не может быть распарсен.

xml.parsers.expat.errors.XML_ERROR_DUPLICATE_ATTRIBUTE

Атрибут использовался более одного раза в начальном теге.

xml.parsers.expat.errors.XML_ERROR_INCORRECT_ENCODING
xml.parsers.expat.errors.XML_ERROR_INVALID_TOKEN

Вызывается, когда входной байт не может быть правильно назначен символу; например, байт NUL (значение 0) во входном потоке UTF-8.

xml.parsers.expat.errors.XML_ERROR_JUNK_AFTER_DOC_ELEMENT

После элемента документа произошло что-то отличное от пробела.

xml.parsers.expat.errors.XML_ERROR_MISPLACED_XML_PI

Объявление XML было найдено не в начале входных данных.

xml.parsers.expat.errors.XML_ERROR_NO_ELEMENTS

Документ не содержит элементов (XML требует, чтобы все документы содержали только один элемент верхнего уровня).

xml.parsers.expat.errors.XML_ERROR_NO_MEMORY

Expat не удалось выделяет внутреннюю память.

xml.parsers.expat.errors.XML_ERROR_PARAM_ENTITY_REF

Обнаружена ссылка на сущность параметра там, где это не разрешено.

xml.parsers.expat.errors.XML_ERROR_PARTIAL_CHAR

Во входных данных обнаружен неполный символ.

xml.parsers.expat.errors.XML_ERROR_RECURSIVE_ENTITY_REF

Ссылка на объект содержала другую ссылку на тот же объект; возможно, через другое имя и, возможно, косвенно.

xml.parsers.expat.errors.XML_ERROR_SYNTAX

Обнаружена некоторая неуказанная синтаксическая ошибка.

xml.parsers.expat.errors.XML_ERROR_TAG_MISMATCH

Конечный тег не соответствует самому внутреннему открытому начальному тегу.

xml.parsers.expat.errors.XML_ERROR_UNCLOSED_TOKEN

Некоторый токен (например, начальный тег) не был закрыт до конца потока или до обнаружения следующего токена.

xml.parsers.expat.errors.XML_ERROR_UNDEFINED_ENTITY

Была сделана ссылка на сущность, которая не была определена.

xml.parsers.expat.errors.XML_ERROR_UNKNOWN_ENCODING

Кодировка документа не поддерживается Expat.

xml.parsers.expat.errors.XML_ERROR_UNCLOSED_CDATA_SECTION

Раздел с пометкой CDATA не был закрыт.

xml.parsers.expat.errors.XML_ERROR_EXTERNAL_ENTITY_HANDLING
xml.parsers.expat.errors.XML_ERROR_NOT_STANDALONE

Парсер определил, что документ не является «автономным», хотя он объявил себя в объявлении XML, и был установлен NotStandaloneHandler и возвращён 0.

xml.parsers.expat.errors.XML_ERROR_UNEXPECTED_STATE
xml.parsers.expat.errors.XML_ERROR_ENTITY_DECLARED_IN_PE
xml.parsers.expat.errors.XML_ERROR_FEATURE_REQUIRES_XML_DTD

Была запрошена операция, которая требует компиляции поддержки DTD, но Expat был настроен без поддержки DTD. Об этом никогда не должна сообщать стандартная сборка модуля xml.parsers.expat.

xml.parsers.expat.errors.XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING

После начала парсинга было запрошено изменение поведения, которое можно изменяет только до начала парсинга. Это (в настоящее время) вызывается только UseForeignDTD().

xml.parsers.expat.errors.XML_ERROR_UNBOUND_PREFIX

Обнаружен необъявленный префикс при включенной обработке пространства имён.

xml.parsers.expat.errors.XML_ERROR_UNDECLARING_PREFIX

В документе предпринята попытка удаляет объявление пространства имён, связанное с префиксом.

xml.parsers.expat.errors.XML_ERROR_INCOMPLETE_PE

Сущность параметра содержала неполную разметку.

xml.parsers.expat.errors.XML_ERROR_XML_DECL

Документ вообще не содержал элемента документа.

xml.parsers.expat.errors.XML_ERROR_TEXT_DECL

Произошла ошибка при парсинге текстового объявления во внешнем объекте.

xml.parsers.expat.errors.XML_ERROR_PUBLICID

В общедоступном идентификаторе обнаружены недопустимые символы.

xml.parsers.expat.errors.XML_ERROR_SUSPENDED

Запрошенная операция была выполнена на приостановленном парсере, но не разрешена. Сюда входят попытки предоставить дополнительный ввод или останавливает парсер.

xml.parsers.expat.errors.XML_ERROR_NOT_SUSPENDED

Была предпринята попытка возобновить парсер, когда парсер не был приостановлен.

xml.parsers.expat.errors.XML_ERROR_ABORTED

Об этом не следует сообщать приложениям Python.

xml.parsers.expat.errors.XML_ERROR_FINISHED

Запрошенная операция была выполнена на парсере, который завершил парсинг ввода, но не разрешен. Сюда входят попытки предоставить дополнительный ввод или останавливает парсер.

xml.parsers.expat.errors.XML_ERROR_SUSPEND_PE

Сноски

[1]Строка кодировки, включенная в вывод XML, должна соответствовать соответствующим стандартам. Например, «UTF-8» допустимо, а «UTF8» — нет. См. w3 и iana.