Документация Python неофициальный перевод
Содержание страницы

20.13. xml.parsers.expat – Быстрый разбор XML с помощью Expatxml.parsers.expat – Fast XML parsing using 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.org/"
      xmlns:py = "http://www.python.org/ns/">
  <py:elem1 />
  <elem2 xmlns="" />
</root>

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

http://default-namespace.org/ root
http://www.python.org/ns/ elem1
elem2

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

См. также

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

20.13.1. Объекты XMLParserXMLParser Objects

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

xmlparser.Parse(data[, isfinal])

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

xmlparser.ParseFile(file)

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

xmlparser.SetBase(base)

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

xmlparser.GetBase()

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

xmlparser.GetInputContext()

Возвращает входные данные, которые породили текущее событие, в виде строки. Данные находятся в кодировке сущности, содержащей текст. Если этот метод вызван, когда обработчик события не активен, возвращается значение None.

xmlparser.ExternalEntityParserCreate(context, encodingencoding])

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

xmlparser.SetParamEntityParsing(flag)

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

xmlparser.UseForeignDTD([flag])

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

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

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

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

xmlparser.buffer_size

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

xmlparser.buffer_text

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

xmlparser.buffer_used

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

xmlparser.ordered_attributes

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

xmlparser.specified_attributes

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

Следующие атрибуты содержат значения, относящиеся к последней ошибке, возникшей в объекте 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, кодировки текста документа и необязательное объявление «standalone». version и encoding будут строками, а standalone будет 1, если документ объявлен как standalone, 0, если объявлено, что он не является standalone, или -1, если атрибут standalone был опущен. Доступно только в Expat версии 1.95.0 или новее.

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

Вызывается, когда Expat начинает разбор объявления типа документа (<!DOCTYPE ...). Параметр doctypeName передаётся в точности так, как представлен. Параметры systemId и publicId задают системный и публичный идентификаторы, если они указаны, или None, если опущены. has_internal_subset будет иметь значение true, если документ содержит внутреннее подмножество объявления документа. Для этого требуется 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 будет true. Требуется Expat версии 1.95.0 или новее.

xmlparser.StartElementHandler(name, attributes)

Вызывается для начала каждого элемента. name – строка, содержащая имя элемента, а attributes – атрибуты элемента. Если ordered_attributes равно true, это список (см. 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 будет true, если сущность является параметрической, и false для общих сущностей (большинству приложений нужно иметь дело только с общими сущностями). Доступно начиная с версии 1.95.0 библиотеки Expat.

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

Вызывается для объявлений нотации. notationName, base, systemId и publicId являются строками, если заданы. Если public identifier опущен, 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-документ не был объявлен как самостоятельный (standalone). Это происходит, когда присутствует внешнее подмножество или ссылка на параметрическую сущность, но объявление XML не устанавливает standalone равным yes. Если этот обработчик возвращает 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, если он задан.

20.13.2. Исключения ExpatErrorExpatError Exceptions

Исключения 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.

20.13.3. ПримерExample

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

import xml.parsers.expat

# 3 функции-обработчика
def start_element(name, attrs):
    print('Start element:', name, attrs)
def end_element(name):
    print('End element:', name)
def char_data(data):
    print('Character data:', 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">Text goes here</child1>
<child2 name="fred">More text</child2>
</parent>""", 1)

Результат работы этой программы:

Start element: parent {'id': 'top'}
Start element: child1 {'name': 'paul'}
Character data: 'Text goes here'
End element: child1
Character data: '\n'
Start element: child2 {'name': 'fred'}
Character data: 'More text'
End element: child2
Character data: '\n'
End element: parent

20.13.4. Описания моделей содержимогоContent Model Descriptions

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

Значения первых двух полей – это константы, определённые в модуле 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*.

20.13.5. Константы ошибок ExpatExpat error constants

Следующие константы предоставлены в модуле xml.parsers.expat.errors. Эти константы полезны для интерпретации некоторых атрибутов объектов исключений ExpatError, возникающих при ошибке. Поскольку из соображений обратной совместимости значением констант является сообщение об ошибке, а не числовой код ошибки, это делается путём сравнения атрибута 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

Возникает, когда входной байт не удаётся правильно сопоставить с символом; например, нулевой байт (значение 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

Парсер определил, что документ не является «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 скомпилирован без неё. Стандартная сборка модуля 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» – нет. См. https://www.w3.org/TR/2006/REC-xml11-20060816/#NT-EncodingDecl и https://www.iana.org/assignments/character-sets/character-sets.xhtml.