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

xml.sax.reader.md

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

1> **Источник:** https://python-all.ru/3.0/library/xml.sax.reader.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `xml.sax.xmlreader` – Интерфейс для парсеров XML89SAX-анализаторы реализуют интерфейс [`XMLReader`](https://python-all.ru/3.0/library/xml.sax.reader.html#xml.sax.xmlreader.XMLReader). Они реализованы в модуле Python, который должен предоставлять функцию `create_parser()`. Эта функция вызывается функцией [`xml.sax.make_parser()`](https://python-all.ru/3.0/library/xml.sax.html#xml.sax.make_parser) без аргументов для создания нового объекта анализатора.1011#### `[xml.sax.xmlreader.XMLReader]class xml.sax.xmlreader.XMLReader`1213Базовый класс, который могут наследовать парсеры SAX.1415#### `[xml.sax.xmlreader.IncrementalParser]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#### `[xml.sax.xmlreader.Locator]class xml.sax.xmlreader.Locator`2627Интерфейс для связывания события SAX с местоположением в документе. Объект локатора будет возвращать корректные результаты только во время вызовов методов DocumentHandler; в любое другое время результаты непредсказуемы. Если информация недоступна, методы могут возвращать2829`None`3031.3233#### `[xml.sax.xmlreader.InputSource]class xml.sax.xmlreader.InputSource([systemId])`3435Инкапсуляция информации, необходимой [`XMLReader`](https://python-all.ru/3.0/library/xml.sax.reader.html#xml.sax.xmlreader.XMLReader) для чтения сущностей.3637Этот класс может включать информацию об открытом идентификаторе, системном идентификаторе, потоке байтов (возможно, с информацией о кодировке символов) и/или потоке символов сущности.3839Приложения будут создавать объекты этого класса для использования в методе [`XMLReader.parse()`](https://python-all.ru/3.0/library/xml.sax.reader.html#xml.sax.xmlreader.XMLReader.parse) и для возврата из EntityResolver.resolveEntity.4041Объект [`InputSource`](https://python-all.ru/3.0/library/xml.sax.reader.html#xml.sax.xmlreader.InputSource) принадлежит приложению; [`XMLReader`](https://python-all.ru/3.0/library/xml.sax.reader.html#xml.sax.xmlreader.XMLReader) не имеет права изменять объекты [`InputSource`](https://python-all.ru/3.0/library/xml.sax.reader.html#xml.sax.xmlreader.InputSource), переданные ему от приложения, хотя может создавать их копии и изменять их.4243#### `[xml.sax.xmlreader.AttributesImpl]class xml.sax.xmlreader.AttributesImpl(attrs)`4445Это реализация интерфейса4647`Attributes`4849(см. раздел5051[*Интерфейс Attributes*](https://python-all.ru/3.0/library/xml.sax.reader.html#attributes-objects)5253). Это объект, подобный словарю, который представляет атрибуты элемента в вызове5455`startElement()`5657. В дополнение к наиболее полезным операциям со словарем он поддерживает ряд других методов, как описано в интерфейсе. Объекты этого класса должны создаваться анализаторами;5859*attrs*6061должен быть объектом, подобным словарю, содержащим отображение имен атрибутов в их значения.6263#### `[xml.sax.xmlreader.AttributesNSImpl]class xml.sax.xmlreader.AttributesNSImpl(attrs, qnames)`6465Вариант с поддержкой пространств имен от6667[`AttributesImpl`](https://python-all.ru/3.0/library/xml.sax.reader.html#xml.sax.xmlreader.AttributesImpl)6869, который будет передан в7071`startElementNS()`7273. Он унаследован от7475[`AttributesImpl`](https://python-all.ru/3.0/library/xml.sax.reader.html#xml.sax.xmlreader.AttributesImpl)7677, но понимает имена атрибутов как кортежи из двух элементов:7879*namespaceURI*8081и8283*localname*8485. Кроме того, он предоставляет ряд методов, ожидающих квалифицированные имена в том виде, в котором они встречаются в исходном документе. Этот класс реализует интерфейс8687`AttributesNS`8889(см. раздел9091[*Интерфейс AttributesNS*](https://python-all.ru/3.0/library/xml.sax.reader.html#attributes-ns-objects)9293).9495## Объекты XMLReader9697Интерфейс [`XMLReader`](https://python-all.ru/3.0/library/xml.sax.reader.html#xml.sax.xmlreader.XMLReader) поддерживает следующие методы:9899#### `[xml.sax.xmlreader.XMLReader.parse]XMLReader.parse(source)`100101Обрабатывает входной источник, генерируя события SAX. Объект102103*source*104105может быть системным идентификатором (строкой, идентифицирующей входной источник – обычно имя файла или URL), файлоподобным объектом или объектом106107[`InputSource`](https://python-all.ru/3.0/library/xml.sax.reader.html#xml.sax.xmlreader.InputSource)108109. Когда110111[`parse()`](https://python-all.ru/3.0/library/xml.sax.reader.html#xml.sax.xmlreader.XMLReader.parse)112113возвращает управление, входные данные полностью обработаны, и объект анализатора может быть отброшен или сброшен. Ограничение: текущая реализация принимает только байтовые потоки; обработка символьных потоков – предмет дальнейшего изучения.114115#### `[xml.sax.xmlreader.XMLReader.getContentHandler]XMLReader.getContentHandler()`116117Возвращает текущий118119`ContentHandler`120121.122123#### `[xml.sax.xmlreader.XMLReader.setContentHandler]XMLReader.setContentHandler(handler)`124125Устанавливает текущий126127`ContentHandler`128129. Если никакой130131`ContentHandler`132133не установлен, события содержимого будут отбрасываться.134135#### `[xml.sax.xmlreader.XMLReader.getDTDHandler]XMLReader.getDTDHandler()`136137Возвращает текущий138139`DTDHandler`140141.142143#### `[xml.sax.xmlreader.XMLReader.setDTDHandler]XMLReader.setDTDHandler(handler)`144145Устанавливает текущий146147`DTDHandler`148149. Если никакой150151`DTDHandler`152153не установлен, события DTD будут отбрасываться.154155#### `[xml.sax.xmlreader.XMLReader.getEntityResolver]XMLReader.getEntityResolver()`156157Возвращает текущий158159`EntityResolver`160161.162163#### `[xml.sax.xmlreader.XMLReader.setEntityResolver]XMLReader.setEntityResolver(handler)`164165Устанавливает текущий166167`EntityResolver`168169. Если никакой170171`EntityResolver`172173не установлен, попытки разрешить внешнюю сущность приведут к открытию системного идентификатора сущности и завершатся ошибкой, если он недоступен.174175#### `[xml.sax.xmlreader.XMLReader.getErrorHandler]XMLReader.getErrorHandler()`176177Возвращает текущий178179`ErrorHandler`180181.182183#### `[xml.sax.xmlreader.XMLReader.setErrorHandler]XMLReader.setErrorHandler(handler)`184185Устанавливает текущий обработчик ошибок. Если никакой186187`ErrorHandler`188189не установлен, ошибки будут вызываться как исключения, а предупреждения будут выводиться.190191#### `[xml.sax.xmlreader.XMLReader.setLocale]XMLReader.setLocale(locale)`192193Позволяет приложению задать локаль для ошибок и предупреждений.194195SAX-парсеры не обязаны обеспечивать локализацию ошибок и предупреждений; если они не могут поддерживать запрошенную локаль, они должны выбросить исключение SAX. Приложения могут запросить смену локали в середине разбора.196197#### `[xml.sax.xmlreader.XMLReader.getFeature]XMLReader.getFeature(featurename)`198199Возвращает текущее значение настройки для объекта200201*featurename*202203. Если такой объект не распознан, возбуждается204205`SAXNotRecognizedException`206207. Известные имена объектов перечислены в модуле208209[`xml.sax.handler`](https://python-all.ru/3.0/library/xml.sax.handler.html#module-xml.sax.handler)210211.212213#### `[xml.sax.xmlreader.XMLReader.setFeature]XMLReader.setFeature(featurename, value)`214215Устанавливает для объекта216217*featurename*218219значение220221*value*222223. Если такой объект не распознан, возбуждается224225`SAXNotRecognizedException`226227. Если объект или его значение не поддерживается синтаксическим анализатором, возбуждается228229*SAXNotSupportedException*230231.232233#### `[xml.sax.xmlreader.XMLReader.getProperty]XMLReader.getProperty(propertyname)`234235Возвращает текущее значение настройки для свойства236237*propertyname*238239. Если такое свойство не распознано, возбуждается240241`SAXNotRecognizedException`242243. Известные имена свойств перечислены в модуле244245[`xml.sax.handler`](https://python-all.ru/3.0/library/xml.sax.handler.html#module-xml.sax.handler)246247.248249#### `[xml.sax.xmlreader.XMLReader.setProperty]XMLReader.setProperty(propertyname, value)`250251Устанавливает для свойства252253*propertyname*254255значение256257*value*258259. Если такое свойство не распознано, возбуждается260261`SAXNotRecognizedException`262263. Если свойство или его значение не поддерживается анализатором, возбуждается264265*SAXNotSupportedException*266267.268269## Объекты IncrementalParser270271Экземпляры [`IncrementalParser`](https://python-all.ru/3.0/library/xml.sax.reader.html#xml.sax.xmlreader.IncrementalParser) предоставляют следующие дополнительные методы:272273#### `[xml.sax.xmlreader.IncrementalParser.feed]IncrementalParser.feed(data)`274275Обрабатывает фрагмент276277*data*278279.280281#### `[xml.sax.xmlreader.IncrementalParser.close]IncrementalParser.close()`282283Принимает конец документа. Это позволяет проверить условия корректности, которые могут быть проверены только в конце, вызвать обработчики и, возможно, освободить ресурсы, выделенные во время разбора.284285#### `[xml.sax.xmlreader.IncrementalParser.reset]IncrementalParser.reset()`286287Этот метод вызывается после вызова close для сброса парсера, чтобы он был готов к разбору новых документов. Результаты вызова parse или feed после close без вызова reset не определены.288289## Объекты Locator290291Экземпляры [`Locator`](https://python-all.ru/3.0/library/xml.sax.reader.html#xml.sax.xmlreader.Locator) предоставляют следующие методы:292293#### `[xml.sax.xmlreader.Locator.getColumnNumber]Locator.getColumnNumber()`294295Возвращает номер столбца, в котором заканчивается текущее событие.296297#### `[xml.sax.xmlreader.Locator.getLineNumber]Locator.getLineNumber()`298299Возвращает номер строки, в которой заканчивается текущее событие.300301#### `[xml.sax.xmlreader.Locator.getPublicId]Locator.getPublicId()`302303Возвращает общедоступный идентификатор текущего события.304305#### `[xml.sax.xmlreader.Locator.getSystemId]Locator.getSystemId()`306307Возвращает системный идентификатор текущего события.308309## Объекты InputSource310311#### `[xml.sax.xmlreader.InputSource.setPublicId]InputSource.setPublicId(id)`312313Устанавливает открытый идентификатор данного314315[`InputSource`](https://python-all.ru/3.0/library/xml.sax.reader.html#xml.sax.xmlreader.InputSource)316317.318319#### `[xml.sax.xmlreader.InputSource.getPublicId]InputSource.getPublicId()`320321Возвращает открытый идентификатор данного322323[`InputSource`](https://python-all.ru/3.0/library/xml.sax.reader.html#xml.sax.xmlreader.InputSource)324325.326327#### `[xml.sax.xmlreader.InputSource.setSystemId]InputSource.setSystemId(id)`328329Устанавливает системный идентификатор данного330331[`InputSource`](https://python-all.ru/3.0/library/xml.sax.reader.html#xml.sax.xmlreader.InputSource)332333.334335#### `[xml.sax.xmlreader.InputSource.getSystemId]InputSource.getSystemId()`336337Возвращает системный идентификатор данного338339[`InputSource`](https://python-all.ru/3.0/library/xml.sax.reader.html#xml.sax.xmlreader.InputSource)340341.342343#### `[xml.sax.xmlreader.InputSource.setEncoding]InputSource.setEncoding(encoding)`344345Устанавливает кодировку символов этого [`InputSource`](https://python-all.ru/3.0/library/xml.sax.reader.html#xml.sax.xmlreader.InputSource).346347Кодировка должна быть строкой, приемлемой для объявления кодировки XML (см. раздел 4.3.3 рекомендации XML).348349Атрибут кодировки [`InputSource`](https://python-all.ru/3.0/library/xml.sax.reader.html#xml.sax.xmlreader.InputSource) игнорируется, если [`InputSource`](https://python-all.ru/3.0/library/xml.sax.reader.html#xml.sax.xmlreader.InputSource) также содержит поток символов.350351#### `[xml.sax.xmlreader.InputSource.getEncoding]InputSource.getEncoding()`352353Получить кодировку символов данного InputSource.354355#### `[xml.sax.xmlreader.InputSource.setByteStream]InputSource.setByteStream(bytefile)`356357Устанавливает байтовый поток (Python-подобный файловый объект, который не выполняет преобразование байтов в символы) для этого источника ввода.358359SAX-парсер будет игнорировать это, если также указан символьный поток, но он будет использовать байтовый поток, а не открывать подключение по URI самостоятельно.360361Если приложению известна кодировка символов байтового потока, оно должно задать её с помощью метода setEncoding.362363#### `[xml.sax.xmlreader.InputSource.getByteStream]InputSource.getByteStream()`364365Получить байтовый поток для этого источника входных данных.366367Метод getEncoding возвращает кодировку символов для этого байтового потока или None, если она неизвестна.368369#### `[xml.sax.xmlreader.InputSource.setCharacterStream]InputSource.setCharacterStream(charfile)`370371Устанавливает символьный поток для этого источника ввода. (Поток должен быть файловым объектом, обёрнутым в Unicode Python 1.6, который выполняет преобразование в строки.)372373Если указан поток символов, анализатор SAX будет игнорировать любой байтовый поток и не будет пытаться открыть URI-соединение с системным идентификатором.374375#### `[xml.sax.xmlreader.InputSource.getCharacterStream]InputSource.getCharacterStream()`376377Получить поток символов для этого источника ввода.378379## Интерфейс `Attributes`380381Объекты `Attributes` реализуют часть протокола отображения, включая методы `copy()`, `get()`, [`__contains__()`](https://python-all.ru/3.0/reference/datamodel.html#object.__contains__), `items()`, `keys()` и `values()`. Также предоставляются следующие методы:382383#### `[xml.sax.xmlreader.Attributes.getLength]Attributes.getLength()`384385Возвращает количество атрибутов.386387#### `[xml.sax.xmlreader.Attributes.getNames]Attributes.getNames()`388389Возвращает имена атрибутов.390391#### `[xml.sax.xmlreader.Attributes.getType]Attributes.getType(name)`392393Возвращает тип атрибута394395*name*396397, который обычно равен398399`'CDATA'`400401.402403#### `[xml.sax.xmlreader.Attributes.getValue]Attributes.getValue(name)`404405Возвращает значение атрибута406407*имя*408409.410411## Интерфейс `AttributesNS`412413Этот интерфейс является подтипом интерфейса `Attributes` (см. раздел [*Интерфейс Attributes*](https://python-all.ru/3.0/library/xml.sax.reader.html#attributes-objects)). Все методы, поддерживаемые этим интерфейсом, также доступны для объектов `AttributesNS`.414415Также доступны следующие методы:416417#### `[xml.sax.xmlreader.AttributesNS.getValueByQName]AttributesNS.getValueByQName(name)`418419Возвращает значение для полного имени.420421#### `[xml.sax.xmlreader.AttributesNS.getNameByQName]AttributesNS.getNameByQName(name)`422423Возвращает пару424425`(namespace, localname)`426427для уточнённого428429*name*430431.432433#### `[xml.sax.xmlreader.AttributesNS.getQNameByName]AttributesNS.getQNameByName(name)`434435Возвращает уточнённое имя для пары436437`(namespace, localname)`438439.440441#### `[xml.sax.xmlreader.AttributesNS.getQNames]AttributesNS.getQNames()`442443Возвращает полные имена всех атрибутов.444