xml.parsers.expat — Быстрый парсинг XML с использованием Expat


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

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

Модуль xml.parsers.expat является интерфейсом Python к Expat не проверяющему XML парсеру. Модуль обеспечивает единственный дополнительный тип, 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 для каждого документа, чтобы предоставить уникальные экземпляры парсера.

См.также

Синтаксический анализатор Expat XML
Главная страница проекта Expat.

Объекты XMLParser

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

xmlparser.Parse(data[, isfinal])

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

xmlparser.ParseFile(file)

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

xmlparser.SetBase(base)

Устанавливает основу быть используемый для решения относительного URIs в системных идентификаторах в декларациях. Решение относительных идентификаторов оставляют применению: через это значение пройдут как аргумент 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. Возвращает true, если установка флага прошла успешно.

xmlparser.UseForeignDTD([flag])

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

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

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

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

xmlparser.buffer_size

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

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

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

Названный, когда Expat начинает парсинг декларация (<!DOCTYPE ...) типа документа. doctypeName обеспечен точно, как представлено. Параметры systemId и publicId дают системные и public идентификаторы, если они указаны, или 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 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 будет верным, если сущность является параметрической или false для общих сущностей (большинство приложений должны быть связаны только с общими сущностями). Это доступно только начиная с версии 1.95.0 библиотеки Expat.

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

Вызвал объявление нотации. notationName, base, и systemId и publicId - строки, если дали. Если идентификатор public опущен, 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(). Идентификаторы public и системы systemId и publicId строки, если они указаны; если идентификатор public не задан, publicId будет None. context значение является непрозрачным и должен быть используемый только как описано ниже.

Для анализа внешних сущностей этот обработчик должен быть реализован. Это ответственно за создание sub-парсер, использующего 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 handler functions
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

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

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

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

Expat константы ошибок

В модуле 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

В идентификаторе public найдены недопустимые символы.

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.