Spec-Zone.ru › Python 3.14

xml.dom — API объектной модели документа

Исходный код: Lib/xml/dom/__init__.py

Объектная модель документа, или «DOM», — это независимый от языка API Консорциума Всемирной паутины (W3C) для доступа к XML-документам и их изменения. Реализация DOM представляет XML-документ в виде древовидной структуры или позволяет клиентскому коду создавать такую структуру с нуля. Затем она предоставляет доступ к структуре через набор объектов, реализующих известные интерфейсы.

DOM чрезвычайно полезна для приложений со случайным доступом. SAX позволяет просматривать только одну часть документа за раз. Если вы рассматриваете один элемент SAX, у вас нет доступа к другому. Если вы рассматриваете текстовый узел, у вас нет доступа к содержащему его элементу. При написании приложения SAX вам нужно самостоятельно отслеживать в коде положение программы в документе. SAX не делает этого за вас. Кроме того, если вам нужно заглянуть вперёд в XML-документе, вам просто не повезло.

Некоторые приложения просто невозможно реализовать в управляемой событиями модели без доступа к дереву. Конечно, вы могли бы самостоятельно построить некое дерево на основе событий SAX, но DOM позволяет не писать этот код. DOM — это стандартное древовидное представление данных XML.

Объектная модель документа определяется W3C поэтапно, или, согласно их терминологии, «уровнями». Сопоставление API с Python в значительной степени основано на рекомендации DOM Level 2.

Обычно DOM-приложения начинают с разбора XML в DOM. DOM Level 1 вообще не рассматривает, как это делается, а Level 2 лишь немного улучшает ситуацию: существует класс объекта DOMImplementation, предоставляющий доступ к методам создания Document, но отсутствует независимый от реализации способ получить доступ к средству чтения/анализатору XML или построителю Document. Также не существует чётко определённого способа получить доступ к этим методам без уже имеющегося объекта Document. В Python каждая реализация DOM предоставляет функцию getDOMImplementation(). DOM Level 3 добавляет спецификацию Load/Store, определяющую интерфейс средства чтения, однако она пока недоступна в стандартной библиотеке Python.

Получив объект DOM-документа, вы можете обращаться к частям XML-документа через его свойства и методы. Эти свойства определены в спецификации DOM; в этой части справочного руководства описывается интерпретация спецификации в Python.

Спецификация W3C определяет API DOM для Java, ECMAScript и OMG IDL. Сопоставление с Python, описанное здесь, в значительной степени основано на версии спецификации для IDL, однако строгое соответствие не является обязательным (хотя реализации могут поддерживать строгое сопоставление с IDL). Подробное обсуждение требований к сопоставлению см. в разделе Соответствие.

См. также

Спецификация объектной модели документа (DOM) Level 2

Рекомендация W3C, на которой основан API DOM для Python.

Спецификация объектной модели документа (DOM) Level 1

Рекомендация W3C для DOM, поддерживаемой xml.dom.minidom.

Спецификация сопоставления с языком Python

В ней определено сопоставление OMG IDL с Python.

Содержимое модуля

Модуль xml.dom содержит следующие функции:

xml.dom.registerDOMImplementation(name, factory)

Зарегистрировать функцию factory под именем name. Функция-фабрика должна возвращать объект, реализующий интерфейс DOMImplementation. Функция-фабрика может возвращать один и тот же объект при каждом вызове или создавать новый для каждого вызова, в зависимости от особенностей конкретной реализации (например, если эта реализация поддерживает настройку).

xml.dom.getDOMImplementation(name=None, features=())

Вернуть подходящую реализацию DOM. Значение name может быть общеизвестным именем, именем модуля реализации DOM или None. Если это не None, импортируется соответствующий модуль и, если импорт завершается успешно, возвращается объект DOMImplementation. Если имя не задано и установлена переменная среды PYTHON_DOM, для поиска реализации используется её значение.

Если имя не задано, эта функция проверяет доступные реализации, чтобы найти ту, которая поддерживает требуемый набор возможностей. Если подходящую реализацию найти не удаётся, возбуждается исключение ImportError. Список возможностей должен быть последовательностью пар (feature, version), передаваемых методу hasFeature() доступных объектов DOMImplementation.

Также предоставляется несколько вспомогательных констант:

xml.dom.EMPTY_NAMESPACE

Значение, указывающее, что с узлом DOM не связано пространство имён. Обычно оно используется как значение namespaceURI узла или передаётся в качестве параметра namespaceURI методу, работающему с пространствами имён.

xml.dom.XML_NAMESPACE

URI пространства имён, связанного с зарезервированным префиксом xml, как определено в документе Пространства имён в XML (раздел 4).

xml.dom.XMLNS_NAMESPACE

URI пространства имён для объявлений пространств имён, как определено в Основной спецификации объектной модели документа (DOM) Level 2 (раздел 1.1.8).

xml.dom.XHTML_NAMESPACE

URI пространства имён XHTML, определённого в документе XHTML 1.0: расширяемый язык разметки гипертекста (раздел 3.1.1).

Кроме того, xml.dom содержит базовый класс Node и классы исключений DOM. Класс Node, предоставляемый этим модулем, не реализует ни один из методов или атрибутов, определённых спецификацией DOM; их должны предоставлять конкретные реализации DOM. Класс Node, входящий в состав этого модуля, предоставляет константы, используемые для атрибута nodeType конкретных объектов Node; они находятся внутри класса, а не на уровне модуля, чтобы соответствовать спецификациям DOM.

Объекты в DOM

Исчерпывающая документация по DOM — это спецификация DOM от W3C.

Обратите внимание, что атрибутами DOM можно манипулировать и как узлами, а не только как простыми строками. Однако необходимость делать это возникает довольно редко, поэтому такое использование пока не документировано.

Интерфейс

Раздел

Назначение

DOMImplementation

Объекты DOMImplementation

Интерфейс к базовой реализации.

Node

Объекты Node

Базовый интерфейс для большинства объектов документа.

NodeList

Объекты NodeList

Интерфейс для последовательности узлов.

DocumentType

Объекты DocumentType

Сведения об объявлениях, необходимых для обработки документа.

Document

Объекты Document

Объект, представляющий документ целиком.

Element

Объекты Element

Узлы-элементы в иерархии документа.

Attr

Объекты Attr

Узлы со значениями атрибутов узлов-элементов.

Comment

Объекты Comment

Представление комментариев в исходном документе.

Text

Объекты Text и CDATASection

Узлы, содержащие текстовое содержимое документа.

ProcessingInstruction

Объекты ProcessingInstruction

Представление инструкции обработки.

В дополнительном разделе описаны исключения, определённые для работы с DOM в Python.

Объекты DOMImplementation

Интерфейс DOMImplementation позволяет приложениям определить, доступны ли определённые возможности в используемой ими реализации DOM. В DOM Level 2 также появилась возможность создавать новые объекты Document и DocumentType с помощью DOMImplementation.

DOMImplementation.hasFeature(feature, version)

Возвращает True, если реализована возможность, определяемая парой строк feature и version.

DOMImplementation.createDocument(namespaceUri, qualifiedName, doctype)

Возвращает новый объект Document (корень DOM) с дочерним объектом Element, которому заданы значения namespaceUri и qualifiedName. Параметр doctype должен быть объектом DocumentType, созданным с помощью createDocumentType(), либо None. В API DOM для Python первые два аргумента также могут иметь значение None, указывающее, что дочерний узел Element создавать не нужно.

DOMImplementation.createDocumentType(qualifiedName, publicId, systemId)

Возвращает новый объект DocumentType, содержащий заданные строки qualifiedName, publicId и systemId, представляющие сведения из объявления типа XML-документа.

Объекты Node

Все компоненты XML-документа являются подклассами Node.

Node.nodeType

Целое число, представляющее тип узла. Символьные константы типов находятся в объекте Node: ELEMENT_NODE, ATTRIBUTE_NODE, TEXT_NODE, CDATA_SECTION_NODE, ENTITY_NODE, PROCESSING_INSTRUCTION_NODE, COMMENT_NODE, DOCUMENT_NODE, DOCUMENT_TYPE_NODE, NOTATION_NODE. Это атрибут только для чтения.

Node.parentNode

Родитель текущего узла или None для узла документа. Значением всегда является объект Node или None. Для узлов Element это будет родительский элемент, за исключением корневого элемента: в этом случае значением будет объект Document. Для узлов Attr значением всегда является None. Это атрибут только для чтения.

Node.attributes

Объект NamedNodeMap, содержащий объекты атрибутов. Фактические значения есть только у элементов; для остальных узлов этот атрибут содержит None. Это атрибут только для чтения.

Node.previousSibling

Узел, непосредственно предшествующий этому узлу и имеющий того же родителя. Например, это элемент с закрывающим тегом, расположенный непосредственно перед открывающим тегом элемента self. Разумеется, XML-документы состоят не только из элементов, поэтому предыдущим соседним узлом может быть текст, комментарий или что-либо ещё. Если этот узел — первый дочерний узел родителя, значением атрибута будет None. Это атрибут только для чтения.

Node.nextSibling

Узел, непосредственно следующий за этим узлом и имеющий того же родителя. См. также previousSibling. Если этот узел — последний дочерний узел родителя, значением атрибута будет None. Это атрибут только для чтения.

Node.childNodes

Список узлов, содержащихся в этом узле. Это атрибут только для чтения.

Node.firstChild

Первый дочерний узел, если он есть, или None. Это атрибут только для чтения.

Node.lastChild

Последний дочерний узел, если он есть, или None. Это атрибут только для чтения.

Node.localName

Часть tagName после двоеточия, если оно есть, иначе вся tagName. Значение является строкой.

Node.prefix

Часть tagName перед двоеточием, если оно есть, иначе пустая строка. Значение является строкой или None.

Node.namespaceURI

Пространство имён, связанное с именем элемента. Значением будет строка или None. Это атрибут только для чтения.

Node.nodeName

Для каждого типа узла этот атрибут имеет своё значение; подробности см. в спецификации DOM. Информацию, которую можно получить здесь, всегда можно получить и из другого свойства, например свойства tagName для элементов или свойства name для атрибутов. Для всех типов узлов значением этого атрибута будет строка или None. Это атрибут только для чтения.

Node.nodeValue

Для каждого типа узла этот атрибут имеет своё значение; подробности см. в спецификации DOM. Ситуация аналогична описанной для nodeName. Значением является строка или None.

Node.hasAttributes()

Возвращает True, если у узла есть атрибуты.

Node.hasChildNodes()

Возвращает True, если у узла есть дочерние узлы.

Node.isSameNode(other)

Возвращает True, если other ссылается на тот же узел, что и этот узел. Это особенно полезно для реализаций DOM, использующих прокси-архитектуру любого типа (поскольку на один и тот же узел могут ссылаться несколько объектов).

Примечание

Этот метод основан на предложенном API DOM Level 3, который всё ещё находится на стадии «рабочего черновика», однако именно этот интерфейс, по-видимому, не вызывает споров. Изменения W3C не обязательно повлияют на этот метод в интерфейсе DOM для Python (хотя любой новый API W3C для этого также будет поддерживаться).

Node.appendChild(newChild)

Добавляет новый дочерний узел в конец списка дочерних узлов этого узла и возвращает newChild. Если узел уже находился в дереве, сначала он удаляется оттуда.

Node.insertBefore(newChild, refChild)

Вставляет новый дочерний узел перед существующим дочерним узлом. refChild должен быть дочерним узлом этого узла; в противном случае вызывается исключение ValueError. Возвращается newChild. Если значение refChild равно None, newChild вставляется в конец списка дочерних узлов.

Node.removeChild(oldChild)

Удаляет дочерний узел. oldChild должен быть дочерним узлом этого узла; в противном случае вызывается исключение ValueError. При успешном выполнении возвращается oldChild. Если oldChild больше не будет использоваться, следует вызвать его метод unlink().

Node.replaceChild(newChild, oldChild)

Заменяет существующий узел новым. oldChild должен быть дочерним узлом этого узла; в противном случае вызывается исключение ValueError.

Node.normalize()

Объединяет соседние текстовые узлы, чтобы все фрагменты текста хранились в виде отдельных экземпляров Text. Это упрощает обработку текста из дерева DOM во многих приложениях.

Node.cloneNode(deep)

Клонирует этот узел. Если параметр deep задан, клонируются также все дочерние узлы. Возвращается клон.

Объекты NodeList

Объект NodeList представляет собой последовательность узлов. В рекомендации DOM Core эти объекты используются двумя способами: объект Element предоставляет такой объект в качестве списка дочерних узлов, а методы getElementsByTagName() и getElementsByTagNameNS() объекта Node возвращают объекты с этим интерфейсом для представления результатов поиска.

В рекомендации DOM Level 2 для этих объектов определены один метод и один атрибут:

NodeList.item(i)

Возвращает элемент последовательности с индексом i, если он существует, или None. Индекс i не может быть меньше нуля или больше либо равен длине последовательности.

NodeList.length

Количество узлов в последовательности.

Кроме того, интерфейс DOM для Python требует предоставления дополнительной поддержки, позволяющей использовать объекты NodeList как последовательности Python. Все реализации NodeList должны поддерживать __len__() и __getitem__(); это позволяет перебирать NodeList в инструкциях for и обеспечивает корректную поддержку встроенной функции len().

Если реализация DOM поддерживает изменение документа, реализация NodeList также должна поддерживать методы __setitem__() и __delitem__().

Объекты DocumentType

Сведения о нотациях и сущностях, объявленных в документе (включая внешнее подмножество, если парсер использует его и может предоставить эту информацию), доступны из объекта DocumentType. Объект DocumentType документа доступен через атрибут doctype объекта Document; если в документе нет объявления DOCTYPE, атрибут doctype документа будет иметь значение None, а не экземпляр этого интерфейса.

DocumentType является специализацией Node и добавляет следующие атрибуты:

DocumentType.publicId

Публичный идентификатор внешнего подмножества определения типа документа. Значением будет строка или None.

DocumentType.systemId

Системный идентификатор внешнего подмножества определения типа документа. Значением будет URI в виде строки или None.

DocumentType.internalSubset

Строка, содержащая полное внутреннее подмножество документа. Она не включает скобки, ограничивающие подмножество. Если во внутреннем подмножестве документа ничего нет, значением должно быть None.

DocumentType.name

Имя корневого элемента, указанное в объявлении DOCTYPE, если оно есть.

DocumentType.entities

Это объект NamedNodeMap, содержащий определения внешних сущностей. Если имя сущности определено несколько раз, предоставляется только первое определение (остальные игнорируются, как того требует рекомендация XML). Значением может быть None, если парсер не предоставляет эту информацию или если сущности не определены.

DocumentType.notations

Это объект NamedNodeMap, содержащий определения нотаций. Если имя нотации определено несколько раз, предоставляется только первое определение (остальные игнорируются, как того требует рекомендация XML). Значением может быть None, если парсер не предоставляет эту информацию или если нотации не определены.

Объекты Document

Объект Document представляет XML-документ целиком, включая составляющие его элементы, атрибуты, инструкции обработки, комментарии и т. д. Помните, что он наследует свойства от Node.

Document.documentElement

Единственный корневой элемент документа.

Document.createElement(tagName)

Создаёт и возвращает новый узел-элемент. При создании элемент не вставляется в документ. Его необходимо явно вставить одним из других методов, например insertBefore() или appendChild().

Document.createElementNS(namespaceURI, tagName)

Создаёт и возвращает новый элемент с пространством имён. В tagName может быть префикс. При создании элемент не вставляется в документ. Его необходимо явно вставить одним из других методов, например insertBefore() или appendChild().

Document.createTextNode(data)

Создаёт и возвращает текстовый узел, содержащий данные, переданные в качестве параметра. Как и другие методы создания, этот метод не вставляет узел в дерево.

Document.createComment(data)

Создаёт и возвращает узел-комментарий, содержащий данные, переданные в качестве параметра. Как и другие методы создания, этот метод не вставляет узел в дерево.

Document.createProcessingInstruction(target, data)

Создаёт и возвращает узел инструкции обработки, содержащий target и data, переданные в качестве параметров. Как и другие методы создания, этот метод не вставляет узел в дерево.

Document.createAttribute(name)

Создаёт и возвращает узел-атрибут. Этот метод не связывает узел-атрибут с каким-либо конкретным элементом. Чтобы использовать созданный экземпляр атрибута, необходимо вызвать setAttributeNode() для соответствующего объекта Element.

Document.createAttributeNS(namespaceURI, qualifiedName)

Создаёт и возвращает узел-атрибут с пространством имён. В tagName может быть префикс. Этот метод не связывает узел-атрибут с каким-либо конкретным элементом. Чтобы использовать созданный экземпляр атрибута, необходимо вызвать setAttributeNode() для соответствующего объекта Element.

Document.getElementsByTagName(tagName)

Выполняет поиск всех потомков (непосредственных дочерних узлов, дочерних узлов дочерних узлов и т. д.) с заданным именем типа элемента.

Document.getElementsByTagNameNS(namespaceURI, localName)

Выполняет поиск всех потомков (непосредственных дочерних узлов, дочерних узлов дочерних узлов и т. д.) с заданными URI пространства имён и локальным именем. Локальное имя — это часть имени в пространстве имён после префикса.

Объекты Element

Element является подклассом Node и поэтому наследует все атрибуты этого класса.

Element.tagName

Имя типа элемента. В документе, использующем пространства имён, оно может содержать двоеточия. Значение является строкой.

Element.getElementsByTagName(tagName)

То же, что и одноимённый метод класса Document.

Element.getElementsByTagNameNS(namespaceURI, localName)

То же, что и одноимённый метод класса Document.

Element.hasAttribute(name)

Возвращает True, если у элемента есть атрибут с именем name.

Element.hasAttributeNS(namespaceURI, localName)

Возвращает True, если у элемента есть атрибут с заданными namespaceURI и localName.

Element.getAttribute(name)

Возвращает значение атрибута с именем name в виде строки. Если такого атрибута нет, возвращается пустая строка, как если бы атрибут не имел значения.

Element.getAttributeNode(attrname)

Возвращает узел Attr для атрибута с именем attrname.

Element.getAttributeNS(namespaceURI, localName)

Возвращает значение атрибута с заданными namespaceURI и localName в виде строки. Если такого атрибута нет, возвращается пустая строка, как если бы атрибут не имел значения.

Element.getAttributeNodeNS(namespaceURI, localName)

Возвращает значение атрибута в виде узла по заданным namespaceURI и localName.

Element.removeAttribute(name)

Удаляет атрибут по имени. Если подходящий атрибут не найден, вызывается исключение NotFoundErr.

Element.removeAttributeNode(oldAttr)

Удаляет oldAttr из списка атрибутов и возвращает его, если он присутствует. Если oldAttr отсутствует, вызывается исключение NotFoundErr.

Element.removeAttributeNS(namespaceURI, localName)

Удаляет атрибут по имени. Обратите внимание: используется localName, а не qname. Если подходящий атрибут не найден, исключение не вызывается.

Element.setAttribute(name, value)

Задаёт значение атрибута в виде строки.

Element.setAttributeNode(newAttr)

Добавляет в элемент новый узел-атрибут, при необходимости заменяя существующий атрибут, если совпадает атрибут name. При замене возвращается старый узел-атрибут. Если newAttr уже используется, вызывается исключение InuseAttributeErr.

Element.setAttributeNodeNS(newAttr)

Добавляет в элемент новый узел-атрибут, при необходимости заменяя существующий атрибут, если совпадают атрибуты namespaceURI и localName. При замене возвращается старый узел-атрибут. Если newAttr уже используется, вызывается исключение InuseAttributeErr.

Element.setAttributeNS(namespaceURI, qname, value)

Задаёт значение атрибута в виде строки по заданным namespaceURI и qname. Обратите внимание: qname — это полное имя атрибута. Этим данный метод отличается от описанного выше.

Объекты Attr

Attr наследуется от Node и поэтому наследует все его атрибуты.

Attr.name

Имя атрибута. В документе, использующем пространства имён, оно может содержать двоеточие.

Attr.localName

Часть имени после двоеточия, если оно есть, иначе всё имя. Это атрибут только для чтения.

Attr.prefix

Часть имени перед двоеточием, если оно есть, иначе пустая строка.

Attr.value

Текстовое значение атрибута. Это синоним атрибута nodeValue.

Объекты NamedNodeMap

NamedNodeMap не наследуется от Node.

NamedNodeMap.length

Длина списка атрибутов.

NamedNodeMap.item(index)

Возвращает атрибут с указанным индексом. Порядок атрибутов произволен, но остаётся неизменным в течение всего времени существования DOM. Каждый элемент — это узел-атрибут. Получить его значение можно с помощью атрибута value.

Кроме того, существуют экспериментальные методы, добавляющие этому классу поведение отображения. Их можно использовать вместо стандартизированного семейства методов getAttribute*() объектов Element.

Объекты Comment

Comment представляет комментарий в XML-документе. Это подкласс Node, который не может иметь дочерних узлов.

Comment.data

Содержимое комментария в виде строки. Атрибут содержит все символы между начальным <!-- и конечным --> маркерами, не включая их.

Объекты Text и CDATASection

Интерфейс Text представляет текст в XML-документе. Если парсер и реализация DOM поддерживают расширение XML для DOM, фрагменты текста, заключённые в разделы CDATA, хранятся в объектах CDATASection. Эти два интерфейса идентичны, но предоставляют разные значения атрибута nodeType.

Эти интерфейсы расширяют интерфейс Node. У них не может быть дочерних узлов.

Text.data

Содержимое текстового узла в виде строки.

Примечание

Использование узла CDATASection не означает, что узел представляет целый раздел CDATA, а лишь указывает, что его содержимое было частью раздела CDATA. Один раздел CDATA может быть представлен несколькими узлами в дереве документа. Невозможно определить, представляют ли два соседних узла CDATASection разные разделы CDATA.

Объекты ProcessingInstruction

Представляет инструкцию обработки в XML-документе; этот интерфейс наследует интерфейс Node и не может иметь дочерних узлов.

ProcessingInstruction.target

Содержимое инструкции обработки до первого символа пробела. Это атрибут только для чтения.

ProcessingInstruction.data

Содержимое инструкции обработки после первого символа пробела.

Исключения

Рекомендация DOM Level 2 определяет одно исключение — DOMException — и ряд констант, позволяющих приложениям определить тип возникшей ошибки. Экземпляры DOMException содержат атрибут code, которому присваивается соответствующее значение для конкретного исключения.

Интерфейс DOM для Python предоставляет эти константы, а также расширяет набор исключений, так что для каждого кода исключения, определённого DOM, существует отдельное исключение. Реализации должны вызывать соответствующее конкретное исключение, каждое из которых содержит соответствующее значение атрибута code.

exception xml.dom.DOMException

Базовый класс исключений для всех конкретных исключений DOM. Непосредственно создать экземпляр этого класса исключения нельзя.

exception xml.dom.DomstringSizeErr

Возникает, если указанный диапазон текста не помещается в строку. Известно, что реализации DOM для Python не используют это исключение, однако оно может быть получено от реализаций DOM, написанных не на Python.

exception xml.dom.HierarchyRequestErr

Возникает при попытке вставить узел в место, где тип этого узла не допускается.

exception xml.dom.IndexSizeErr

Возникает, если индекс или параметр размера метода отрицателен либо превышает допустимое значение.

exception xml.dom.InuseAttributeErr

Возникает при попытке вставить узел Attr, который уже находится в другом месте документа.

exception xml.dom.InvalidAccessErr

Возникает, если параметр или операция не поддерживаются базовым объектом.

exception xml.dom.InvalidCharacterErr

Это исключение возникает, если строковый параметр содержит символ, недопустимый в контексте его использования согласно рекомендации XML 1.0. Например, попытка создать узел Element с пробелом в имени типа элемента приведёт к возникновению этой ошибки.

exception xml.dom.InvalidModificationErr

Возникает при попытке изменить тип узла.

exception xml.dom.InvalidStateErr

Возникает при попытке использовать объект, который не определён или больше не может использоваться.

exception xml.dom.NamespaceErr

Это исключение возникает при попытке изменить объект способом, запрещённым рекомендацией Пространства имён в XML.

exception xml.dom.NotFoundErr

Исключение возникает, если узел отсутствует в указанном контексте. Например, NamedNodeMap.removeNamedItem() вызовет это исключение, если переданный узел отсутствует в карте.

exception xml.dom.NotSupportedErr

Возникает, если реализация не поддерживает запрошенный тип объекта или операцию.

exception xml.dom.NoDataAllowedErr

Возникает, если данные указаны для узла, который не поддерживает данные.

exception xml.dom.NoModificationAllowedErr

Возникает при попытке изменить объект, изменения которого запрещены (например, узел только для чтения).

exception xml.dom.SyntaxErr

Возникает, если указана недопустимая или неверная строка.

exception xml.dom.WrongDocumentErr

Возникает, если узел вставляется в документ, отличный от того, которому он принадлежит в данный момент, а реализация не поддерживает перенос узла из одного документа в другой.

Коды исключений, определённые в рекомендации DOM, соответствуют описанным выше исключениям согласно следующей таблице:

Константа

Исключение

DOMSTRING_SIZE_ERR

DomstringSizeErr

HIERARCHY_REQUEST_ERR

HierarchyRequestErr

INDEX_SIZE_ERR

IndexSizeErr

INUSE_ATTRIBUTE_ERR

InuseAttributeErr

INVALID_ACCESS_ERR

InvalidAccessErr

INVALID_CHARACTER_ERR

InvalidCharacterErr

INVALID_MODIFICATION_ERR

InvalidModificationErr

INVALID_STATE_ERR

InvalidStateErr

NAMESPACE_ERR

NamespaceErr

NOT_FOUND_ERR

NotFoundErr

NOT_SUPPORTED_ERR

NotSupportedErr

NO_DATA_ALLOWED_ERR

NoDataAllowedErr

NO_MODIFICATION_ALLOWED_ERR

NoModificationAllowedErr

SYNTAX_ERR

SyntaxErr

WRONG_DOCUMENT_ERR

WrongDocumentErr

Соответствие требованиям

В этом разделе описаны требования к соответствию и взаимосвязи между API DOM для Python, рекомендациями W3C DOM и отображением OMG IDL для Python.

Отображение типов

Типы IDL, используемые в спецификации DOM, отображаются в типы Python согласно следующей таблице.

Тип IDL

Тип Python

boolean

bool or int

int

int

long int

int

unsigned int

int

DOMString

str or bytes

null

None

Методы доступа

Отображение OMG IDL в Python определяет функции доступа для объявлений attribute IDL примерно так же, как отображение Java. Отображение объявлений IDL

readonly attribute string someValue;
         attribute string anotherValue;

даёт три функции доступа: метод «get» для someValue (_get_someValue()), а также методы «get» и «set» для anotherValue (_get_anotherValue() и _set_anotherValue()). В частности, отображение не требует, чтобы атрибуты IDL были доступны как обычные атрибуты Python: object.someValue не обязано работать и может вызвать исключение AttributeError.

Однако API DOM для Python требует, чтобы обычный доступ к атрибутам работал. Это означает, что типичные прокси-объекты, генерируемые компиляторами IDL для Python, скорее всего, не будут работать, и при доступе к объектам DOM через CORBA на стороне клиента могут понадобиться объекты-обёртки. Хотя для клиентов DOM на основе CORBA это требует некоторых дополнительных мер, разработчики с опытом использования DOM через CORBA из Python не считают это проблемой. Атрибуты, объявленные как readonly, могут не ограничивать доступ на запись во всех реализациях DOM.

В API DOM для Python функции доступа не обязательны. Если они предоставляются, их следует реализовать в форме, определённой отображением IDL для Python, однако такие методы считаются излишними, поскольку атрибуты доступны непосредственно из Python. Для атрибутов readonly никогда не следует предоставлять функции доступа «set».

Определения IDL не полностью отражают требования API W3C DOM, например понятие «живых» объектов, таких как возвращаемое значение getElementsByTagName(). API DOM для Python не требует от реализаций соблюдения таких требований.

© 2001 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/library/xml.dom.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API