Spec-Zone.ru › Python 3.5

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 рассматривается так же, как пропуск). При включённой обработке XML-пространств имён имена элементов и имена атрибутов, относящиеся к пространству имён, будут расширены. Имя элемента, переданное обработчикам элементов 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.

1. Объекты 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. Возвращает истинное значение, если установка флага прошла успешно.

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 ложно.

xmlparser.ordered_attributes

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

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)

Вызывается, когда 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 истинно, это список (см. 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 будет истинным, если сущность является параметрической сущностью, или ложным для общих сущностей (большинству приложений нужно беспокоиться только об общих сущностях). Это доступно начиная с версии 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(). Идентификаторы public и system, systemId и publicId, представляют собой строки, если заданы; если идентификатор public не задан, publicId будет None. Значение context является неопределённым и должно использоваться только, как описано ниже.

Для анализа внешних сущностей этот обработчик должен быть реализован. Он отвечает за создание подпарсера с помощью ExternalEntityParserCreate(context), инициализацию его соответствующими обратными вызовами и анализ сущности. Этот обработчик должен возвращать целое число; если он возвращает 0, анализатор вызовет ошибку XML_ERROR_EXTERNAL_ENTITY_HANDLING, в противном случае анализ продолжится.

Если этот обработчик не предоставлен, внешние сущности будут отслеживаться обратным вызовом DefaultHandler, если он предоставлен.

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

3. Пример

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

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

4. Описания моделей содержимого

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

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

5. Константы ошибок 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

Парсер определил, что документ не является «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–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.5/library/pyexpat.html

Spec-Zone.ru

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