Документация Python неофициальный перевод

xml.sax.reader.md

246 строк · 19.8 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.5/library/xml.sax.reader.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 20.12. [`xml.sax.xmlreader`](https://python-all.ru/3.5/library/xml.sax.reader.html#module-xml.sax.xmlreader) – Интерфейс для парсеров XML89**Исходный код:** [Lib/xml/sax/xmlreader.py](https://python-all.ru/src/3.5/Lib/xml/sax/xmlreader.py)1011---1213Парсеры SAX реализуют интерфейс [`XMLReader`](https://python-all.ru/3.5/library/xml.sax.reader.html#xml.sax.xmlreader.XMLReader). Они реализованы в модуле Python, который должен предоставлять функцию `create_parser()`. Эта функция вызывается [`xml.sax.make_parser()`](https://python-all.ru/3.5/library/xml.sax.html#xml.sax.make_parser) без аргументов для создания нового объекта парсера.1415#### `class xml.sax.xmlreader.XMLReader`1617Базовый класс, который могут наследовать парсеры SAX.1819#### `class xml.sax.xmlreader.IncrementalParser`2021В некоторых случаях не требуется разбирать входной источник целиком, а лучше подавать фрагменты документа по мере их поступления. Обратите внимание, что чтение обычно не считывает весь файл, а также читает его по частям; тем не менее `parse()` не вернёт управление, пока не будет обработан весь документ. Поэтому эти интерфейсы следует использовать, если блокирующее поведение `parse()` нежелательно.2223После создания экземпляра парсер готов начать немедленно принимать данные через метод feed. После завершения разбора вызовом close необходимо вызвать метод reset, чтобы парсер снова был готов принимать новые данные, либо через feed, либо с помощью parse.2425Обратите внимание, что эти методы *не* должны вызываться во время разбора, то есть после вызова parse и до его возврата.2627По умолчанию класс также реализует метод parse интерфейса XMLReader, используя методы feed, close и reset интерфейса IncrementalParser, для удобства разработчиков драйверов SAX 2.0.2829#### `class xml.sax.xmlreader.Locator`3031Интерфейс для привязки события SAX к местоположению в документе. Объект локатора возвращает корректные результаты только во время вызовов методов DocumentHandler; в любое другое время результаты непредсказуемы. Если информация недоступна, методы могут вернуть `None`.3233#### `class xml.sax.xmlreader.InputSource(system_id=None)`3435Инкапсуляция информации, необходимой [`XMLReader`](https://python-all.ru/3.5/library/xml.sax.reader.html#xml.sax.xmlreader.XMLReader) для чтения сущностей.3637Этот класс может включать информацию об открытом идентификаторе, системном идентификаторе, потоке байтов (возможно, с информацией о кодировке символов) и/или потоке символов сущности.3839Приложения создают объекты этого класса для использования в методе [`XMLReader.parse()`](https://python-all.ru/3.5/library/xml.sax.reader.html#xml.sax.xmlreader.XMLReader.parse) и для возврата из EntityResolver.resolveEntity.4041Объект [`InputSource`](https://python-all.ru/3.5/library/xml.sax.reader.html#xml.sax.xmlreader.InputSource) принадлежит приложению; [`XMLReader`](https://python-all.ru/3.5/library/xml.sax.reader.html#xml.sax.xmlreader.XMLReader) не имеет права изменять объекты [`InputSource`](https://python-all.ru/3.5/library/xml.sax.reader.html#xml.sax.xmlreader.InputSource), переданные ему от приложения, хотя может создавать копии и изменять их.4243#### `class xml.sax.xmlreader.AttributesImpl(attrs)`4445Это реализация интерфейса `Attributes` (см. раздел [The Attributes Interface](https://python-all.ru/3.5/library/xml.sax.reader.html#attributes-objects)). Это словареподобный объект, который представляет атрибуты элемента в вызове `startElement()`. В дополнение к наиболее полезным операциям со словарём, он поддерживает ряд других методов, описанных интерфейсом. Объекты этого класса должны создаваться читателями; *attrs* должен быть словареподобным объектом, содержащим отображение имён атрибутов в значения атрибутов.4647#### `class xml.sax.xmlreader.AttributesNSImpl(attrs, qnames)`4849Вариант [`AttributesImpl`](https://python-all.ru/3.5/library/xml.sax.reader.html#xml.sax.xmlreader.AttributesImpl) с поддержкой пространств имён, который передаётся в `startElementNS()`. Он является производным от [`AttributesImpl`](https://python-all.ru/3.5/library/xml.sax.reader.html#xml.sax.xmlreader.AttributesImpl), но понимает имена атрибутов как кортежи из двух элементов: *namespaceURI* и *localname*. Кроме того, он предоставляет ряд методов, ожидающих квалифицированные имена в том виде, в котором они появляются в исходном документе. Этот класс реализует интерфейс `AttributesNS` (см. раздел [The AttributesNS Interface](https://python-all.ru/3.5/library/xml.sax.reader.html#attributes-ns-objects)).5051## 20.12.1. Объекты XMLReader5253Интерфейс [`XMLReader`](https://python-all.ru/3.5/library/xml.sax.reader.html#xml.sax.xmlreader.XMLReader) поддерживает следующие методы:5455#### `XMLReader.parse(source)`5657Обрабатывает входной источник, генерируя события SAX. Объект *источник* может быть системным идентификатором (строкой, идентифицирующей входной источник – обычно имя файла или URL), файлоподобным объектом или объектом [`InputSource`](https://python-all.ru/3.5/library/xml.sax.reader.html#xml.sax.xmlreader.InputSource). Когда [`parse()`](https://python-all.ru/3.5/library/xml.sax.reader.html#xml.sax.xmlreader.XMLReader.parse) возвращает управление, входные данные полностью обработаны, и объект синтаксического анализатора можно отбросить или сбросить.5859Изменено в версии 3.5: Добавлена поддержка потоков символов.6061#### `XMLReader.getContentHandler()`6263Возвращает текущий [`ContentHandler`](https://python-all.ru/3.5/library/xml.sax.handler.html#xml.sax.handler.ContentHandler).6465#### `XMLReader.setContentHandler(handler)`6667Устанавливает текущий [`ContentHandler`](https://python-all.ru/3.5/library/xml.sax.handler.html#xml.sax.handler.ContentHandler). Если [`ContentHandler`](https://python-all.ru/3.5/library/xml.sax.handler.html#xml.sax.handler.ContentHandler) не установлен, события содержимого будут отбрасываться.6869#### `XMLReader.getDTDHandler()`7071Возвращает текущий [`DTDHandler`](https://python-all.ru/3.5/library/xml.sax.handler.html#xml.sax.handler.DTDHandler).7273#### `XMLReader.setDTDHandler(handler)`7475Устанавливает текущий [`DTDHandler`](https://python-all.ru/3.5/library/xml.sax.handler.html#xml.sax.handler.DTDHandler). Если [`DTDHandler`](https://python-all.ru/3.5/library/xml.sax.handler.html#xml.sax.handler.DTDHandler) не установлен, события DTD будут отбрасываться.7677#### `XMLReader.getEntityResolver()`7879Возвращает текущий [`EntityResolver`](https://python-all.ru/3.5/library/xml.sax.handler.html#xml.sax.handler.EntityResolver).8081#### `XMLReader.setEntityResolver(handler)`8283Устанавливает текущий [`EntityResolver`](https://python-all.ru/3.5/library/xml.sax.handler.html#xml.sax.handler.EntityResolver). Если [`EntityResolver`](https://python-all.ru/3.5/library/xml.sax.handler.html#xml.sax.handler.EntityResolver) не установлен, попытки разрешить внешнюю сущность приведут к открытию системного идентификатора сущности и завершатся ошибкой, если он недоступен.8485#### `XMLReader.getErrorHandler()`8687Возвращает текущий [`ErrorHandler`](https://python-all.ru/3.5/library/xml.sax.handler.html#xml.sax.handler.ErrorHandler).8889#### `XMLReader.setErrorHandler(handler)`9091Устанавливает текущий обработчик ошибок. Если [`ErrorHandler`](https://python-all.ru/3.5/library/xml.sax.handler.html#xml.sax.handler.ErrorHandler) не установлен, ошибки будут возбуждаться как исключения, а предупреждения выводиться.9293#### `XMLReader.setLocale(locale)`9495Позволяет приложению задать локаль для ошибок и предупреждений.9697От парсеров SAX не требуется локализация ошибок и предупреждений; однако, если они не поддерживают запрошенную локаль, они должны возбудить исключение SAX. Приложения могут запросить смену локали в середине разбора.9899#### `XMLReader.getFeature(featurename)`100101Возвращает текущее значение настройки функции *featurename*. Если функция не распознана, возбуждается `SAXNotRecognizedException`. Известные имена функций перечислены в модуле [`xml.sax.handler`](https://python-all.ru/3.5/library/xml.sax.handler.html#module-xml.sax.handler).102103#### `XMLReader.setFeature(featurename, value)`104105Устанавливает *featurename* в *value*. Если функция не распознана, возбуждается `SAXNotRecognizedException`. Если функция или её значение не поддерживаются парсером, возбуждается *SAXNotSupportedException*.106107#### `XMLReader.getProperty(propertyname)`108109Возвращает текущее значение настройки свойства *propertyname*. Если свойство не распознано, возбуждается `SAXNotRecognizedException`. Известные имена свойств перечислены в модуле [`xml.sax.handler`](https://python-all.ru/3.5/library/xml.sax.handler.html#module-xml.sax.handler).110111#### `XMLReader.setProperty(propertyname, value)`112113Устанавливает *propertyname* в *value*. Если свойство не распознано, возбуждается `SAXNotRecognizedException`. Если свойство или его значение не поддерживаются парсером, возбуждается *SAXNotSupportedException*.114115## 20.12.2. Объекты IncrementalParser116117Экземпляры [`IncrementalParser`](https://python-all.ru/3.5/library/xml.sax.reader.html#xml.sax.xmlreader.IncrementalParser) предоставляют следующие дополнительные методы:118119#### `IncrementalParser.feed(data)`120121Обрабатывает фрагмент *data*.122123#### `IncrementalParser.close()`124125Принимает конец документа. Это позволяет проверить условия корректности, которые могут быть проверены только в конце, вызвать обработчики и, возможно, освободить ресурсы, выделенные во время разбора.126127#### `IncrementalParser.reset()`128129Этот метод вызывается после вызова close для сброса парсера, чтобы он был готов к разбору новых документов. Результаты вызова parse или feed после close без вызова reset не определены.130131## 20.12.3. Объекты Locator132133Экземпляры [`Locator`](https://python-all.ru/3.5/library/xml.sax.reader.html#xml.sax.xmlreader.Locator) предоставляют следующие методы:134135#### `Locator.getColumnNumber()`136137Возвращает номер столбца, с которого начинается текущее событие.138139#### `Locator.getLineNumber()`140141Возвращает номер строки, с которой начинается текущее событие.142143#### `Locator.getPublicId()`144145Возвращает общедоступный идентификатор текущего события.146147#### `Locator.getSystemId()`148149Возвращает системный идентификатор текущего события.150151## 20.12.4. Объекты InputSource152153#### `InputSource.setPublicId(id)`154155Устанавливает общедоступный идентификатор данного [`InputSource`](https://python-all.ru/3.5/library/xml.sax.reader.html#xml.sax.xmlreader.InputSource).156157#### `InputSource.getPublicId()`158159Возвращает общедоступный идентификатор данного [`InputSource`](https://python-all.ru/3.5/library/xml.sax.reader.html#xml.sax.xmlreader.InputSource).160161#### `InputSource.setSystemId(id)`162163Устанавливает системный идентификатор данного [`InputSource`](https://python-all.ru/3.5/library/xml.sax.reader.html#xml.sax.xmlreader.InputSource).164165#### `InputSource.getSystemId()`166167Возвращает системный идентификатор данного [`InputSource`](https://python-all.ru/3.5/library/xml.sax.reader.html#xml.sax.xmlreader.InputSource).168169#### `InputSource.setEncoding(encoding)`170171Устанавливает кодировку символов данного [`InputSource`](https://python-all.ru/3.5/library/xml.sax.reader.html#xml.sax.xmlreader.InputSource).172173Кодировка должна быть строкой, приемлемой для объявления кодировки XML (см. раздел 4.3.3 рекомендации XML).174175Атрибут encoding [`InputSource`](https://python-all.ru/3.5/library/xml.sax.reader.html#xml.sax.xmlreader.InputSource) игнорируется, если [`InputSource`](https://python-all.ru/3.5/library/xml.sax.reader.html#xml.sax.xmlreader.InputSource) также содержит символьный поток.176177#### `InputSource.getEncoding()`178179Получить кодировку символов данного InputSource.180181#### `InputSource.setByteStream(bytefile)`182183Установить байтовый поток ([двоичный файл](https://python-all.ru/3.5/glossary.html#term-binary-file)) для этого источника входных данных.184185SAX-парсер будет игнорировать это, если также указан символьный поток, но он будет использовать байтовый поток, а не открывать подключение по URI самостоятельно.186187Если приложению известна кодировка символов байтового потока, оно должно задать её с помощью метода setEncoding.188189#### `InputSource.getByteStream()`190191Получить байтовый поток для этого источника входных данных.192193Метод getEncoding вернёт кодировку символов для этого байтового потока или `None`, если она неизвестна.194195#### `InputSource.setCharacterStream(charfile)`196197Установить поток символов ([текстовый файл](https://python-all.ru/3.5/glossary.html#term-text-file)) для этого источника ввода.198199Если указан поток символов, анализатор SAX будет игнорировать любой байтовый поток и не будет пытаться открыть URI-соединение с системным идентификатором.200201#### `InputSource.getCharacterStream()`202203Получить поток символов для этого источника ввода.204205## 20.12.5. Интерфейс `Attributes`206207Объекты `Attributes` реализуют часть [протокола отображения](https://python-all.ru/3.5/glossary.html#term-mapping), включая методы `copy()`, `get()`, [`__contains__()`](https://python-all.ru/3.5/reference/datamodel.html#object.__contains__), `items()`, `keys()` и `values()`. Также предоставляются следующие методы:208209#### `Attributes.getLength()`210211Возвращает количество атрибутов.212213#### `Attributes.getNames()`214215Возвращает имена атрибутов.216217#### `Attributes.getType(name)`218219Возвращает тип атрибута *имя*, который обычно равен `'CDATA'`.220221#### `Attributes.getValue(name)`222223Возвращает значение атрибута *имя*.224225## 20.12.6. Интерфейс `AttributesNS`226227Этот интерфейс является подтипом интерфейса `Attributes` (см. раздел [Интерфейс атрибутов](https://python-all.ru/3.5/library/xml.sax.reader.html#attributes-objects)). Все методы, поддерживаемые этим интерфейсом, также доступны для объектов `AttributesNS`.228229Также доступны следующие методы:230231#### `AttributesNS.getValueByQName(name)`232233Возвращает значение для полного имени.234235#### `AttributesNS.getNameByQName(name)`236237Возвращает пару `(namespace, localname)` для полного *имени*.238239#### `AttributesNS.getQNameByName(name)`240241Возвращает полное имя для пары `(namespace, localname)`.242243#### `AttributesNS.getQNames()`244245Возвращает полные имена всех атрибутов.246