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 также могут быть обработаны как узлы, а не как простые строки. Однако это случается довольно редко, поэтому это использование пока не документировано.
Интерфейс | Раздел | Назначение |
|---|---|---|
| Интерфейс к базовой реализации. | |
| Базовый интерфейс для большинства объектов в документе. | |
| Интерфейс для последовательности узлов. | |
| Информация о декларациях, необходимых для обработки документа. | |
| Объект, представляющий весь документ. | |
| Узлы элемента в иерархии документа. | |
| Узлы значений атрибутов в узлах элемента. | |
| Представление комментариев в исходном документе. | |
| Узлы, содержащие текстовое содержимое документа. | |
| Представление инструкции обработки. |
Дополнительный раздел описывает исключения, определённые для работы с 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, соответствуют описанным выше исключениям в соответствии с этой таблицей:
Константа | Исключение |
|---|---|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
3. Соответствие
Этот раздел описывает требования к соответствию и взаимоотношения между API Python DOM, рекомендациями W3C DOM и отображением OMG IDL для Python.
3.1. Сопоставление типов
Примитивные типы IDL, используемые в спецификации DOM, сопоставляются с типами Python в соответствии со следующей таблицей.
Тип IDL | Тип Python |
|---|---|
|
|
|
|
|
|
|
|
Кроме того, 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