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 поэтапно или в терминологии «уровни». Отображение Python API по существу основано на рекомендации DOM уровня 2.

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

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

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

См.также

Спецификация уровня 2 объектной модели документа (DOM)
Рекомендация W3C, на которой базируется API Python DOM.
Спецификация объектной модели документа (DOM) уровня 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 пространства имен для объявлений пространства имен, как определено в Базовая спецификация уровня 2 объектной модели документа (DOM) (раздел 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 Объекты узла Базовый интерфейс для большинства объектов документа.
NodeList Объекты списка узлов Интерфейс для последовательности узлов.
DocumentType Объекты типа документа Сведения о декларациях, необходимых для обработки документа.
Document Объекты документа Объект, представляющий весь документ.
Element Объекты элемента Узлы элементов в иерархии документов.
Attr Объекты-атрибуты Узлы значение атрибутов на узлах элементов.
Comment Объекты комментариев Представление комментариев в исходном документе.
Text Текст и объекты CDATASection Узлы, содержащие текстовое содержимое документа.
ProcessingInstruction Объекты ProcessingInstruction Обработка представления команды.

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

Объекты DOMImplementation

Интерфейс DOMImplementation позволяет приложениям определять доступность определенных функций в используемом ими DOM. DOM уровня 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. В Python DOM API первые два аргумента также могут быть None, чтобы указать, что Element нижестоящий элемент не должен быть создан.

DOMImplementation.createDocumentType(qualifiedName, publicId, systemId)

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

Объекты узла

Все компоненты 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

Узел, который непосредственно предшествует этому узлу, имеет один и тот же родительский узел. Для сущность элемента с конечным тегом, который находится непосредственно перед начальным тегом самого элемента. Конечно, 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 уровня 3 DOM, который все еще находится на стадии «рабочего черновика», но этот конкретный интерфейс представляется бесспорным. Изменения от W3C не обязательно затронут этот метод в интерфейсе Python DOM (хотя любой новый W3C API для этого был бы также поддержан).

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 представляет последовательность узлов. Объекты используются двумя способами в основной рекомендации DOM: объект Element обеспечивает тот как свой список дочерних узлов, getElementsByTagName() и методы getElementsByTagNameNS() объектов Node возвращает с этим интерфейсом, чтобы представлять результаты запроса.

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

NodeList.item(i)

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

NodeList.length

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

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

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

Объекты типа документа

Информация о нотациях и сущностях, объявленных документом (включая внешнее подмножество, если парсер использует его и может предоставить информацию), доступна из объекта DocumentType. DocumentType для документа доступен из Document doctype объекта атрибут; если для документа нет 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 представляет собой весь 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 является подклассом 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 наследует от Node, так наследует все его атрибуты.

Attr.name

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

Attr.localName

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

Attr.prefix

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

Attr.value

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

Объекты NamedNiveMap

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

NamedNodeMap.length

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

NamedNodeMap.item(index)

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

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

Объекты комментариев

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

Comment.data

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

Текст и объекты 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 уровня 2 определяет одно исключение, DOMException и ряд констант, которые позволяют приложениям определять, какая ошибка произошла. DOMException сущности содержат code атрибут, который обеспечивает соответствующую значение для конкретной особой ситуации.

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

exception xml.dom.DOMException

Базовый класс исключений используемый для всех определенных исключений DOM. Этот класс исключения не может быть создан непосредственно.

exception xml.dom.DomstringSizeErr

Возникает, когда указанный диапазон текста не помещается в строка. Это не известно как используемый в Python реализациях DOM, но может быть получено от реализаций 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, рекомендациями DOM W3C и отображением IDL OMG для Python.

Сопоставление типов

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

IDL тип Python тип
boolean bool или int
int int
long int int
unsigned int int
DOMString str или bytes
null None

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

Отображение из OMG IDL в Python определяет функции доступа для объявлений IDL attribute в значительной степени так же, как отображение 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 Python DOM не требует нормального доступа к атрибуту. Это означает, что типичные суррогаты, сгенерированные компиляторами IDL Python, вряд ли будут работать, и объекты-оболочки могут потребоваться клиенту, если доступ к объектам DOM осуществляется через CORBA. Хотя это требует дополнительного рассмотрения для клиентов CORBA DOM, реализаторы, имеющие опыт использования DOM вместо CORBA из Python, не считают это проблемой. Атрибуты, объявленные readonly, не могут ограничивать доступ на запись во всех реализациях DOM.

В Python DOM API функции доступа не требуются. Если обеспечено, они должны принять форму, определенную отображением Python IDL, но эти методы считают ненужными, так как атрибуты доступны непосредственно от Python. Средства доступа «Set» никогда не должны предоставляться для readonly атрибуты.

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