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

xml.sax.reader.md

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

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