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

xml.sax.reader.md

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

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