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