Spec-Zone.ru › Python 2.7

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

Новое в версии 2.0.

Модель объекта документа, или «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. В Python каждая реализация DOM предоставит функцию getDOMImplementation(). DOM Level 3 добавляет спецификацию Load/Store, которая определяет интерфейс к читателю, но этого пока нет в стандартной библиотеке Python.

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

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

См. также

Спецификация Document Object Model (DOM) Level 2

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

Спецификация Document Object Model (DOM) Level 1

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

Спецификация карты языка Python

Здесь указано отображение OMG IDL в Python.

1. Содержание модуля

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

xml.dom.registerDOMImplementation(name, factory)

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

xml.dom.getDOMImplementation([name[, features]])

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

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

Также предоставляются некоторые удобные константы:

xml.dom.EMPTY_NAMESPACE

Значение, используемое для указания того, что с узлом в DOM не ассоциируется ни один namespace. Обычно это значение находится как namespaceURI узла или используется в качестве параметра namespaceURI для метода, специфичного для namespace.

Новое в версии 2.2.

xml.dom.XML_NAMESPACE

Namespace URI, связанный с зарезервированным префиксом xml, как определено в Namespaces in XML (раздел 4).

Новое в версии 2.2.

xml.dom.XMLNS_NAMESPACE

Namespace URI для объявлений namespace, как определено в Спецификация Document Object Model (DOM) Level 2 Core (раздел 1.1.8).

Новое в версии 2.2.

xml.dom.XHTML_NAMESPACE

URI namespace XHTML, как определено в XHTML 1.0: The Extensible HyperText Markup Language (раздел 3.1.1).

Новое в версии 2.2.

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

2. Объекты DOM

Определяющая документация по DOM — это спецификация DOM от W3C.

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

Интерфейс

Раздел

Назначение

DOMImplementation

Объекты DOMImplementation

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

Node

Объекты узла

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

NodeList

Объекты NodeList

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

DocumentType

Объекты DocumentType

Информация о декларациях, необходимых для обработки документа.

Document

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

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

Element

Объекты элемента

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

Attr

Объекты Attr

Узлы значений атрибутов в узлах элемента.

Comment

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

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

Text

Объекты Text и CDATASection

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

ProcessingInstruction

Объекты ProcessingInstruction

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

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

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

DOMImplementation.createDocumentType(qualifiedName, publicId, systemId)

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

2.2. Объекты узлов

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

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

Новое в версии 2.1.

Node.cloneNode(deep)

Создаёт копию этого узла. Установка deep означает клонирование всех дочерних узлов тоже. Возвращает копию.

2.3. Объекты NodeList

NodeList представляет собой последовательность узлов. Эти объекты используются двумя способами в рекомендации DOM Core: объект 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__().

2.4. Объекты 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 если информация не предоставлена парсером или если обозначения не определены.

2.5. Объекты документов

Объект 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 пространства имён и локальным именем. Локальное имя — это часть пространства имён после префикса.

2.6. Объекты элементов

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 — это полное имя атрибута. Это отличается от вышеизложенного.

2.7. Объекты атрибутов

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

Attr.name

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

Attr.localName

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

Attr.prefix

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

Attr.value

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

2.8. Объекты NamedNodeMap

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

NamedNodeMap.length

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

NamedNodeMap.item(index)

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

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

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

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

Comment.data

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

2.10. Объекты Text и CDATASection

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

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

Text.data

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

Примечание

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

2.11. Объекты ProcessingInstruction

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

ProcessingInstruction.target

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

ProcessingInstruction.data

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

2.12. Исключение

Введено в версии 2.1.

Рекомендация DOM Level 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

Если попытка изменить какой-либо объект не допускается в отношении рекомендации Namespaces in 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

3. Соответствие

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

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

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

Тип IDL

Тип Python

boolean

IntegerType (со значением 0 или 1)

int

IntegerType

long int

IntegerType

unsigned int

IntegerType

Кроме того, DOMString, определённое в рекомендации, отображается как строка Python или строка Unicode. Приложения должны уметь обрабатывать Unicode, когда строка возвращается из DOM.

Значение IDL null отображается как None, которое может приниматься или предоставляться реализацией, когда null разрешено API.

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

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

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

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

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

Spec-Zone.ru

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