Spec-Zone.ru › Python 3.11

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 об ошибке. Дополнительные сведения об интерпретации ошибок Expat см. в разделе Исключения ExpatError.

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 должно быть истинным; это позволяет разбирать один файл по частям, а не передавать несколько файлов. Значение 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. Возвращает 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 в качестве исправления безопасности. Если код запускается в разных версиях Python, проверяйте наличие SetReparseDeferralEnabled() с помощью hasattr().

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

xmlparser.GetReparseDeferralEnabled()

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

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

Объекты 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-процессоров. По умолчанию значение этого атрибута — 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, если документ объявлен автономным, 0, если объявлено, что он не является автономным, или -1, если предложение standalone отсутствует. Доступно только в 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 равно true, это список (полное описание см. в 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 — это текст комментария без начальных '<!--' и завершающих '-->'.

xmlparser.StartCdataSectionHandler()

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

xmlparser.EndCdataSectionHandler()

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

xmlparser.DefaultHandler(data)

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

xmlparser.DefaultHandlerExpand(data)

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

xmlparser.NotStandaloneHandler()

Вызывается, если XML-документ не объявлен автономным. Это происходит, когда имеется внешнее подмножество или ссылка на параметрическую сущность, но в объявлении XML автономность не установлена в 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, если он задан.

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

Парсер определил, что документ не является «автономным», хотя в объявлении 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
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.

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.11/library/pyexpat.html

Spec-Zone.ru

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