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 Level 2.
Приложения DOM обычно начинают с парсинга XML в DOM. Способ, которым это достигается, вообще не рассматривается в DOM Level 1, а Level 2 предоставляет только ограниченные улучшения: существует класс объектов DOMImplementation, который предоставляет доступ к методам создания Document, но нет способа получить доступ к XML-чтецу/парсеру/строителю документов независимо от реализации. Также нет четкого способа получить доступ к этим методам без существующего объекта Document. В Python каждая реализация DOM предоставит функцию getDOMImplementation(). DOM Level 3 добавляет спецификацию Загрузка/Сохранение, которая определяет интерфейс к читателю, но этого пока нет в стандартной библиотеке Python.
После получения объекта DOM-документа вы можете получить доступ к частям вашего XML-документа через его свойства и методы. Эти свойства определены в спецификации DOM; эта часть справочника описывает интерпретацию спецификации в Python.
Спецификация, предоставленная W3C, определяет API DOM для Java, ECMAScript и OMG IDL. Python-отображение, определенное здесь, в значительной степени основано на версии IDL спецификации, но строгое соответствие не требуется (хотя реализации могут свободно поддерживать строгое отображение из IDL). Подробное обсуждение требований к сопоставлению см. в разделе Соответствие.
См. также
- Спецификация уровня 2 модели объекта документа (DOM)
-
Рекомендация W3C, на которой основана API Python DOM.
- Спецификация уровня 1 модели объекта документа (DOM)
-
Рекомендация 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 также можно манипулировать как узлами вместо простых строк. Однако это довольно редко требуется, поэтому это использование пока не задокументировано.
Интерфейс | Раздел | Назначение |
|---|---|---|
| Интерфейс к базовой реализации. | |
| Базовый интерфейс для большинства объектов в документе. | |
| Интерфейс для последовательности узлов. | |
| Информация о декларациях, необходимых для обработки документа. | |
| Объект, представляющий весь документ. | |
| Элементные узлы в иерархии документа. | |
| Узлы значений атрибутов в узлах элементов. | |
| Представление комментариев в исходном документе. | |
| Узлы, содержащие текстовое содержимое документа. | |
| Представление инструкций обработки. |
Дополнительный раздел описывает исключения, определенные для работы с 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. В 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 -
Список объектов атрибутов. Только у элементов есть фактические значения для этого; другие предоставляют
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 необязательно повлияют на этот метод в интерфейсе 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 во многих приложениях.
-
Node.cloneNode(deep) -
Клонирует этот узел. Установка deep означает клонирование всех дочерних узлов тоже. Возвращает клон.
Объекты NodeList
Объект NodeList представляет собой последовательность узлов. Эти объекты используются двумя способами в рекомендации DOM Core: объект Element предоставляет его как список дочерних узлов, и методы getElementsByTagName() и getElementsByTagNameNS() объекта Node возвращают объекты с этим интерфейсом для представления результатов запроса.
Рекомендация DOM Level 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. Значение объекта 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 представляет собой весь XML-документ, включая составляющие его элементы, атрибуты, инструкции обработки, комментарии и т. д. Помните, что он наследует свойства от Node.
-
Document.documentElement -
Единственный корневой элемент документа.
-
Document.createElement(tagName) -
Создаёт и возвращает новый узел элемента. Элемент не вставляется в документ при создании. Вам необходимо явно вставить его с помощью одного из других методов, таких как
insertBefore()илиappendChild().
-
Document.createElementNS(namespaceURI, tagName) -
Создаёт и возвращает новый элемент с пространством имён. Имя_тега может содержать префикс. Элемент не вставляется в документ при создании. Вам необходимо явно вставить его с помощью одного из других методов, таких как
insertBefore()илиappendChild().
-
Document.createTextNode(data) -
Создаёт и возвращает текстовый узел, содержащий данные, переданные в качестве параметра. Как и в других методах создания, этот метод не вставляет узел в дерево.
-
Document.createComment(data) -
Создаёт и возвращает узел комментария, содержащий данные, переданные в качестве параметра. Как и в других методах создания, этот метод не вставляет узел в дерево.
-
Document.createProcessingInstruction(target, data) -
Создаёт и возвращает узел инструкции обработки, содержащий целевой элемент и данные, переданные в качестве параметров. Как и в других методах создания, этот метод не вставляет узел в дерево.
-
Document.createAttribute(name) -
Создаёт и возвращает узел атрибута. Этот метод не связывает узел атрибута с каким-либо элементом. Вы должны использовать
setAttributeNode()на соответствующем объектеElementдля использования созданного атрибута.
-
Document.createAttributeNS(namespaceURI, qualifiedName) -
Создаёт и возвращает узел атрибута с пространством имён. Имя_тега может содержать префикс. Этот метод не связывает узел атрибута с каким-либо элементом. Вы должны использовать
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) -
Удаляет атрибут по имени. Обратите внимание, что используется локальное имя, а не полное имя. Исключение не генерируется, если соответствующего атрибута нет.
-
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 представляет собой комментарий в XML-документе. Это подкласс Node, но не может иметь дочерние узлы.
-
Comment.data -
Содержимое комментария в виде строки. Атрибут содержит все символы между начальным
<!--и конечным-->, но не включает их.
Узлы текста и CDATASection
Интерфейс Text представляет текст в XML-документе. Если парсер и реализация DOM поддерживают расширение DOM XML, части текста, заключённые в секции с меткой CDATA, хранятся в объектах CDATASection. Эти два интерфейса идентичны, но предоставляют разные значения для атрибута nodeType.
Эти интерфейсы расширяют интерфейс Node. Они не могут иметь дочерние узлы.
-
Text.data -
Содержимое узла текста в виде строки.
Примечание
Использование узла CDATASection не означает, что узел представляет собой полную секцию с меткой CDATA, а только то, что содержимое узла было частью секции CDATA. Одна секция CDATA может быть представлена более чем одним узлом в дереве документа. Нет способа определить, представляют ли два смежных узла CDATASection разные секции с меткой CDATA.
Узлы инструкций обработки
Представляет собой инструкцию обработки в 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 -
Если предпринимается попытка изменить любой объект способом, который не разрешён в соответствии с рекомендацией 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, соответствуют описанным выше исключениям в соответствии с этой таблицей:
Константа | Исключение |
|---|---|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
Соответствие
Этот раздел описывает требования к соответствию и взаимосвязи между API Python DOM, рекомендациями W3C DOM и отображением OMG IDL для Python.
Отображение типов
Типы IDL, используемые в спецификации DOM, отображаются на типы Python в соответствии со следующей таблицей.
END_OF_DOCUMENT_MARKERТип IDL | Тип Python |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
Методы доступа
Сопоставление OMG IDL и Python определяет функции доступа для объявлений IDL attribute аналогичным образом, как это сделано в Java. Сопоставление объявлений IDL
readonly attribute string someValue;
attribute string anotherValue;
дает три функции доступа: метод «получить» для someValue (_get_someValue()), и методы «получить» и «установить» для 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. «Установить» методы доступа не должны предоставляться для атрибутов readonly.
Определения IDL не полностью отражают требования API W3C DOM, такие как понятие некоторых объектов, таких как возвращаемое значение getElementsByTagName(), которые являются «живыми». API Python DOM не требует от реализаций принудительного соблюдения таких требований.
© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.7/library/xml.dom.html