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 должно быть установлено в значение true при последнем вызове этого метода; это позволяет парсить один файл фрагментами, а не отправлять несколько файлов. 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]) -
Вызов с истинным значением для flag (по умолчанию) заставит Expat вызвать
ExternalEntityRefHandlerсNoneдля всех аргументов, чтобы разрешить загрузку альтернативного DTD. Если документ не содержит объявления типа документа,ExternalEntityRefHandlerпо-прежнему будет вызван, ноStartDoctypeDeclHandlerиEndDoctypeDeclHandlerне будут вызваны.Передача ложного значения для flag отменит предыдущий вызов с истинным значением, но в противном случае не оказывает никакого влияния.
Этот метод может быть вызван только до вызова методов
Parse()илиParseFile(); вызов его после вызова любого из них вызываетExpatErrorс атрибутомcode, установленным в значениеerrors.codes[errors.XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING].
xmlparser объекты имеют следующие атрибуты:
-
xmlparser.buffer_size -
Размер буфера, используемого при
buffer_textимеет значение 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, кодировки текста документа и необязательное объявление «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 будет 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 — это строки, если они заданы. Если публичный идентификатор опущен, publicId будет
None.
-
xmlparser.StartNamespaceDeclHandler(prefix, uri) -
Вызывается, когда элемент содержит объявление пространства имен. Объявления пространств имен обрабатываются перед вызовом
StartElementHandlerдля элемента, на котором размещаются объявления.
-
xmlparser.EndNamespaceDeclHandler(prefix) -
Вызывается при достижении закрывающей метки для элемента, содержащего объявление пространства имен. Это вызывается один раз для каждого объявления пространства имен в элементе в обратном порядке вызова
StartNamespaceDeclHandlerдля указания начала области действия каждого объявления пространства имен. Вызовы этого обработчика выполняются после соответствующего вызоваEndElementHandlerдля конца элемента.
-
xmlparser.CommentHandler(data) -
Вызывается для комментариев. data — это текст комментария, за исключением ведущего
'<!--'и последующего'-->'.
-
xmlparser.StartCdataSectionHandler() -
Вызывается в начале секции CDATA. Это и
EndCdataSectionHandlerнеобходимы для идентификации синтаксических начала и конца секций CDATA.
-
xmlparser.EndCdataSectionHandler() -
Вызывается в конце секции CDATA.
-
xmlparser.DefaultHandler(data) -
Вызывается для любых символов в документе XML, для которых не указан соответствующий обработчик. Это означает символы, которые являются частью конструкции, которая может быть сообщена, но для которой не было предоставлено обработчика.
-
xmlparser.DefaultHandlerExpand(data) -
Это то же самое, что и
DefaultHandler(), но не препятствует расширению внутренних сущностей. Ссылка на сущность не будет передана обработчику по умолчанию.
-
xmlparser.NotStandaloneHandler() -
Вызывается, если документ XML не объявлен автономным документом. Это происходит, когда есть внешнее подмножество или ссылка на параметр сущности, но объявление XML не устанавливает автономный параметр в
yesв объявлении XML. Если этот обработчик возвращает0, то анализатор вызовет ошибкуXML_ERROR_NOT_STANDALONE. Если этот обработчик не установлен, анализатор не вызывает ошибку для этого условия.
-
xmlparser.ExternalEntityRefHandler(context, base, systemId, publicId) -
Вызывается при ссылках на внешние сущности. base — текущая база, установленная предыдущим вызовом
SetBase(). Публичные и системные идентификаторы, systemId и publicId, — это строки, если они заданы; если публичный идентификатор не задан, publicId будетNone. Значение context невидимое и должно использоваться только как описано ниже.Для разбора внешних сущностей этот обработчик должен быть реализован. Он отвечает за создание подпарсера с помощью
ExternalEntityParserCreate(context), инициализацию его соответствующими обратными вызовами и разбор сущности. Этот обработчик должен возвращать целое число; если он возвращает0, анализатор вызовет ошибкуXML_ERROR_EXTERNAL_ENTITY_HANDLING, в противном случае разбор продолжится.Если этот обработчик не предоставлен, внешние сущности будут сообщаться обработчиком по умолчанию
DefaultHandler, если он предоставлен.
Исключения ExpatError
ExpatError имеют ряд интересных атрибутов:
-
ExpatError.code -
Внутренний номер ошибки Expat для конкретной ошибки. Словарь
errors.messagesсопоставляет эти номера ошибок с сообщениями об ошибках Expat. Например:from xml.parsers.expat import ParserCreate, ExpatError, errors p = ParserCreate() try: p.Parse(some_xml_document) except ExpatError as err: print("Error:", errors.messages[err.code])Модуль
errorsтакже предоставляет константы сообщений об ошибках и словарьcodes, сопоставляющий эти сообщения обратно с кодами ошибок, см. ниже.
-
ExpatError.lineno -
Номер строки, в которой была обнаружена ошибка. Первая строка имеет номер
1.
-
ExpatError.offset -
Смещение символа в строке, где произошла ошибка. Первый столбец имеет номер
0.
Пример
Следующая программа определяет три обработчика, которые просто выводят свои аргументы.
import xml.parsers.expat
# 3 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, или ‘�’).
-
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 -
Парсер определил, что документ не «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. Это никогда не должно сообщатся приложениями Python, использующими стандартную сборку модуля
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.
© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.9/library/pyexpat.html