Spec-Zone.ru › Python 3.13

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.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.

Объекты XMLParser

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

xmlparser.Parse(data[, isfinal])

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

xmlparser.ParseFile(file)

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

xmlparser.SetBase(base)

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

xmlparser.GetBase()

Возвращает строку, содержащую базовый URL, установленный в предыдущем вызове 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])

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

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

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

xmlparser.SetReparseDeferralEnabled(enabled)

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

Вызов SetReparseDeferralEnabled(False) имеет последствия для безопасности, как подробно описано ниже; убедитесь, что вы понимаете эти последствия перед использованием метода SetReparseDeferralEnabled.

Expat 2.6.0 представил механизм безопасности, называемый «отложенным повторным анализом», в котором вместо того, чтобы вызывать отказ в обслуживании из-за квадратичного времени выполнения при повторном анализе больших токенов, повторный анализ незавершенных токенов теперь по умолчанию откладывается до тех пор, пока не будет достигнуто достаточное количество входных данных. Из-за этой задержки зарегистрированные обработчики могут — в зависимости от размера фрагментов входных данных, отправленных в Expat — больше не вызываться сразу после отправки новых входных данных в анализатор. В ситуациях, когда требуется немедленная обратная связь и взятие на себя ответственности за защиту от отказа в обслуживании из-за больших токенов, вызов SetReparseDeferralEnabled(False) отключает отложенный повторный анализ для текущего экземпляра анализатора Expat, временно или навсегда. Вызов SetReparseDeferralEnabled(True) позволяет снова включить отложенный повторный анализ.

Обратите внимание, что SetReparseDeferralEnabled() был перенесён на некоторые предыдущие версии CPython как исправление уязвимости. Проверьте доступность SetReparseDeferralEnabled() с помощью hasattr(), если используется код, работающий на различных версиях Python.

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

xmlparser.GetReparseDeferralEnabled()

Возвращает, включён ли отложенный повторный анализ для данного экземпляра анализатора Expat.

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

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

xmlparser.buffer_size

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

xmlparser.buffer_text

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

xmlparser.buffer_used

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

xmlparser.ordered_attributes

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

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

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

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

xmlparser.EndDoctypeDeclHandler()

Вызывается после завершения разбора декларации типа документа. Требуется 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 истинно, это список (см. ordered_attributes для полного описания). В противном случае это словарь, сопоставляющий имена значениям.

xmlparser.EndElementHandler(name)

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

xmlparser.ProcessingInstructionHandler(target, data)

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

xmlparser.CharacterDataHandler(data)

Вызывается для данных символов. Это будет вызываться для обычных данных символов, помеченных CDATA-содержимого и игнорируемых пробелов. Приложения, которые должны различать эти случаи, могут использовать обратные вызовы StartCdataSectionHandler, EndCdataSectionHandler и ElementDeclHandler для сбора необходимой информации. Обратите внимание, что данные символов могут быть разбиты на части, даже если они короткие, и поэтому вы можете получить более одного вызова CharacterDataHandler(). Установите атрибут экземпляра buffer_text в True для предотвращения этого.

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 — текст комментария, за исключением ведущих '<!--' и заключительных '-->'.

END_OF_DOCUMENT_MARKER
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 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*.

END_OF_DOCUMENT_MARKER ```

Постоянные значения ошибок Expat

Следующие константы предоставляются в модуле 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

Возникает, когда байт входного потока не может быть правильно присвоен символу; например, байт 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
xml.parsers.expat.errors.XML_ERROR_RESERVED_PREFIX_XML

Была предпринята попытка снять объявление зарезервированного префикса пространства имен xml или связать его с другим URI пространства имен.

xml.parsers.expat.errors.XML_ERROR_RESERVED_PREFIX_XMLNS

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

xml.parsers.expat.errors.XML_ERROR_RESERVED_NAMESPACE_URI

Была предпринята попытка связать URI одного из зарезервированных префиксов пространств имен xml и xmlns с другим префиксом пространства имен.

xml.parsers.expat.errors.XML_ERROR_INVALID_ARGUMENT

Это не должно передаваться приложениям Python.

xml.parsers.expat.errors.XML_ERROR_NO_BUFFER

Это не должно передаваться приложениям Python.

END_OF_DOCUMENT_MARKER
xml.parsers.expat.errors.XML_ERROR_AMPLIFICATION_LIMIT_BREACH

Превышен предел коэффициента усиления входных данных (из DTD и сущностей).

Примечания

[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.

© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/pyexpat.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API