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 уровня 2.
Приложения DOM обычно начинают с разбора некоторого XML в DOM. Как это делается, вообще не рассматривается в DOM уровня 1, а уровень 2 предоставляет лишь ограниченные улучшения: существует класс объектов DOMImplementation, который предоставляет доступ к методам создания Document, но нет способа получить доступ к XML-читателю/парсеру/строителю документа независимым от реализации способом. Также нет четко определенного способа доступа к этим методам без существующего объекта Document. В Python каждая реализация DOM предоставит функцию getDOMImplementation(). DOM уровня 3 добавляет спецификацию загрузки/сохранения, которая определяет интерфейс для читателя, но этого пока нет в стандартной библиотеке Python.
После получения объекта DOM-документа вы можете получить доступ к частям своего XML-документа через его свойства и методы. Эти свойства определены в спецификации DOM; эта часть справочного руководства описывает интерпретацию спецификации в Python.
Спецификация, предоставленная W3C, определяет API DOM для Java, ECMAScript и OMG IDL. Определенная здесь карта Python в значительной степени основана на IDL-версии спецификации, но строгое соответствие не требуется (хотя реализации могут свободно поддерживать строгое отображение из IDL). Подробное обсуждение требований к отображению см. в разделе Соответствие.
См. также
- Спецификация модели объекта документа (DOM) уровня 2
-
Рекомендация W3C, на которой основана API DOM Python.
- Спецификация модели объекта документа (DOM) уровня 1
-
Рекомендация W3C для DOM, поддерживаемого
xml.dom.minidom. - Спецификация сопоставления языков Python
-
Здесь описывается отображение от OMG IDL к Python.
20.6.1. Содержание модуля
В xml.dom содержатся следующие функции:
-
xml.dom.registerDOMImplementation(name, factory) -
Регистрирует функцию factory с именем name. Функция factory должна возвращать объект, реализующий интерфейс
DOMImplementation. Функция factory может возвращать один и тот же объект каждый раз или новый для каждого вызова, в зависимости от конкретной реализации (например, если эта реализация поддерживает некоторую настройку).
-
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) уровня 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.
20.6.2. Объекты DOM
Определяющая документация DOM — это спецификация DOM от W3C.
Обратите внимание, что атрибуты DOM также можно изменять как узлы вместо простых строк. Однако это довольно редко необходимо, поэтому эта форма использования пока не документирована.
Интерфейс | Раздел | Назначение |
|---|---|---|
| Интерфейс к основной реализации. | |
| Базовый интерфейс для большинства объектов в документе. | |
| Интерфейс для последовательности узлов. | |
| Информация о декларациях, необходимых для обработки документа. | |
| Объект, представляющий весь документ. | |
| Узлы элементов в иерархии документов. | |
| Узлы значений атрибутов на узлах элементов. | |
| Представление комментариев в исходном документе. | |
| Узлы, содержащие текстовое содержимое из документа. | |
| Представление инструкций обработки. |
Дополнительный раздел описывает исключения, определенные для работы с DOM в Python.
20.6.2.1. Объекты 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 документа.
20.6.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 для многих приложений.
-
Node.cloneNode(deep) -
Клонирует этот узел. Установка deep означает клонирование всех дочерних узлов тоже. Возвращает клон.
20.6.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__().
20.6.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если информация не предоставлена анализатором или если обозначения не определены.
20.6.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 пространства имён и локальным именем. Локальное имя — это часть пространства имён после префикса.
20.6.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) -
Удаляет атрибут по имени. Обратите внимание, что используется локальное имя, а не полное имя. Исключение не генерируется, если соответствующего атрибута нет.
-
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 — это полное имя атрибута. Это отличается от вышеперечисленного.
20.6.2.7. Объекты атрибутов
Attr наследует от Node, поэтому наследует все его атрибуты.
-
Attr.name -
Имя атрибута. В документе, использующем пространства имён, оно может включать двоеточие.
-
Attr.localName -
Часть имени после двоеточия, если оно есть, иначе всё имя. Это атрибут только для чтения.
-
Attr.prefix -
Часть имени перед двоеточием, если оно есть, иначе пустая строка.
-
Attr.value -
Текстовое значение атрибута. Это синоним для атрибута
nodeValue.
20.6.2.8. Объекты NamedNodeMap
NamedNodeMap не наследуется от Node.
-
NamedNodeMap.length -
Длина списка атрибутов.
-
NamedNodeMap.item(index) -
Возвращает атрибут с заданным индексом. Порядок получения атрибутов произвольный, но будет сохраняться на протяжении всего жизненного цикла DOM. Каждый элемент — это узел атрибута. Получите его значение с помощью атрибута
value.
Также имеются экспериментальные методы, предоставляющие этому классу больше функциональности отображения. Вы можете их использовать или использовать стандартные методы семейства getAttribute*() для объектов Element.
20.6.2.9. Комментарии
Comment представляет комментарий в XML-документе. Это подкласс Node, но не может иметь дочерние узлы.
-
Comment.data -
Содержимое комментария в виде строки. Атрибут содержит все символы между начальным
<!--и заключительным-->, но не включает их.
20.6.2.10. Узлы текста и CDATASection
Интерфейс Text представляет текст в XML-документе. Если реализация парсера и DOM поддерживает расширение DOM XML, части текста, заключённые в секции CDATA, хранятся в объектах CDATASection. Эти два интерфейса идентичны, но предоставляют разные значения для атрибута nodeType.
Эти интерфейсы расширяют интерфейс Node. Они не могут иметь дочерние узлы.
-
Text.data -
Содержимое узла текста в виде строки.
Примечание
Использование узла CDATASection не означает, что узел представляет собой полную секцию CDATA, только то, что содержимое узла было частью секции CDATA. Одна секция CDATA может быть представлена более чем одним узлом в дереве документа. Нет способа определить, представляют ли два смежных узла CDATASection разные секции CDATA.
20.6.2.11. Узлы ProcessingInstruction
Представляет инструкцию обработки в XML-документе; наследуется от интерфейса Node и не может иметь дочерние узлы.
-
ProcessingInstruction.target -
Содержимое инструкции обработки до первого пробела. Этот атрибут является только для чтения.
-
ProcessingInstruction.data -
Содержимое инструкции обработки после первого пробела.
20.6.2.12. Исключения
Рекомендация 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 -
Если производится попытка изменить любой объект способом, не разрешённым в соответствии с рекомендацией Пространства имён в 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, соответствуют описанным выше исключениям в соответствии с этой таблицей:
Константа | Исключение |
|---|---|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
20.6.3. Соответствие
В этом разделе описаны требования к соответствию и взаимосвязи между API Python DOM, рекомендациями W3C DOM и сопоставлением OMG IDL для Python.
20.6.3.1. Сопоставление типов
Типы IDL, используемые в спецификации DOM, сопоставляются с типами Python в соответствии со следующей таблицей.
Тип IDL | Тип Python |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
20.6.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. «Сеттеры» (методы доступа для записи) никогда не должны предоставляться для атрибутов readonly.
Определения IDL не полностью отражают требования API W3C DOM, такие как понятие некоторых объектов, таких как возвращаемое значение getElementsByTagName(), являющихся «динамическими». API Python DOM не требует от реализаций соблюдения таких требований.
© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.6/library/xml.dom.html