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 уровня 1, а уровень 2 предоставляет лишь ограниченные улучшения: Существует класс объектов DOMImplementation
, который предоставляет доступ к методам создания Document
, но нет способа получить доступ к XML-ридеру/парсеру/построителю документов независимым от реализации способом. Также не существует четко определенного способа доступа к этим методам без существующего объекта Document
. В Python каждая реализация DOM будет предоставлять функцию getDOMImplementation()
. DOM Level 3 добавляет спецификацию Load/Store, которая определяет интерфейс для читателя, но она пока не доступна в стандартной библиотеке Python.
Когда у вас есть объект документа DOM, вы можете получить доступ к частям вашего XML-документа через его свойства и методы. Эти свойства определены в спецификации DOM; эта часть справочного руководства описывает интерпретацию спецификации в Python.
Спецификация, предоставленная W3C, определяет DOM API для Java, ECMAScript и OMG IDL. Определенное здесь отображение Python в значительной степени основано на IDL-версии спецификации, но строгое соответствие не требуется (хотя реализации могут свободно поддерживать строгое отображение из IDL). Подробное обсуждение требований к отображению см. в разделе Соответствие.
См.также
- Document Object Model (DOM) Level 2 Specification
Рекомендация W3C, на которой основан Python DOM API.
- Document Object Model (DOM) Level 1 Specification
Рекомендация W3C для DOM, поддерживаемая
xml.dom.minidom
.- Python Language Mapping Specification
Это определяет отображение из OMG IDL в Python.
Содержание модуля¶
В xml.dom
содержатся следующие функции:
- xml.dom.registerDOMImplementation(name, 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
, как определено в Namespaces in XML (раздел 4).
- xml.dom.XMLNS_NAMESPACE¶
URI пространства имен для объявлений пространств имен, как определено в Document Object Model (DOM) Level 2 Core Specification (раздел 1.1.8).
- xml.dom.XHTML_NAMESPACE¶
URI пространства имен XHTML, как определено в XHTML 1.0: The Extensible HyperText Markup Language (раздел 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¶
Объект
NamedNodeMap
атрибута. Только элементы имеют фактические значения для этого атрибута; остальные предоставляютNone
для этого атрибута. Этот атрибут доступен только для чтения.
- Node.previousSibling¶
Узел, который непосредственно предшествует данному с тем же родителем. Например, элемент с тегом end, который находится непосредственно перед тегом start элемента 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
, если другой ссылается на тот же узел, что и этот узел. Это особенно полезно для реализаций 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
для документа доступен из атрибута Document
объекта doctype
; если для документа нет объявления DOCTYPE
, атрибут doctype
документа будет установлен в None
вместо экземпляра этого интерфейса.
DocumentType
является специализацией Node
и добавляет следующие атрибуты:
- DocumentType.publicId¶
Публичный идентификатор для внешнего подмножества определения типа документа. Это будет строка или
None
.
- DocumentType.systemId¶
Системный идентификатор для внешнего подмножества определения типа документа. Это будет URI в виде строки или
None
.
- DocumentType.internalSubset¶
Строка, содержащая полное внутреннее подмножество документа. Не включает скобки, в которых заключено подмножество. Если документ не имеет внутреннего подмножества, это должно быть
None
.
- DocumentType.name¶
Имя корневого элемента, указанное в объявлении
DOCTYPE
, если оно присутствует.
- DocumentType.entities¶
Это
NamedNodeMap
, содержащий определения внешних сущностей. Для имен сущностей, определенных более одного раза, предоставляется только первое определение (остальные игнорируются, как того требуют рекомендации XML). Это может бытьNone
, если информация не предоставляется синтаксическим анализатором или если сущности не определены.
- DocumentType.notations¶
Это
NamedNodeMap
, содержащий определения нотаций. Для имен нотаций, определенных более одного раза, предоставляется только первое определение (остальные игнорируются, как того требуют рекомендации XML). Это может бытьNone
, если информация не предоставляется синтаксическим анализатором или если нотации не определены.
Объекты документов¶
Document
представляет весь XML-документ, включая входящие в него элементы, атрибуты, инструкции по обработке, комментарии и т. д. Помните, что он наследует свойства от Node
.
- Document.documentElement¶
Единственный и неповторимый корневой элемент документа.
- Document.createElement(tagName)¶
Создает и возвращает новый узел элемента. Элемент не вставляется в документ при его создании. Вы должны явно вставить его с помощью одного из других методов, например
insertBefore()
илиappendChild()
.
- Document.createElementNS(namespaceURI, tagName)¶
Создает и возвращает новый элемент с пространством имен. Имя tagName может иметь префикс. Элемент не вставляется в документ при его создании. Вы должны явно вставить его с помощью одного из других методов, например
insertBefore()
илиappendChild()
.
- Document.createTextNode(data)¶
Создает и возвращает текстовый узел, содержащий данные, переданные в качестве параметра. Как и другие методы создания, этот метод не вставляет узел в дерево.
- Document.createComment(data)¶
Создает и возвращает узел комментария, содержащий данные, переданные в качестве параметра. Как и другие методы создания, этот метод не вставляет узел в дерево.
- Document.createProcessingInstruction(target, data)¶
Создает и возвращает узел инструкции обработки, содержащий цель и данные, переданные в качестве параметров. Как и другие методы создания, этот метод не вставляет узел в дерево.
- Document.createAttribute(name)¶
Создает и возвращает узел атрибутов. Этот метод не связывает узел атрибута с каким-либо конкретным элементом. Вы должны использовать
setAttributeNode()
на соответствующем объектеElement
, чтобы использовать только что созданный экземпляр атрибута.
- Document.createAttributeNS(namespaceURI, qualifiedName)¶
Создает и возвращает узел атрибута с пространством имен. Имя tagName может иметь префикс. Этот метод не связывает узел атрибута с каким-либо конкретным элементом. Вы должны использовать
setAttributeNode()
на соответствующем объектеElement
, чтобы использовать только что созданный экземпляр атрибута.
- Document.getElementsByTagName(tagName)¶
Поиск всех потомков (прямых детей, детей детей и т.д.) с определенным именем типа элемента.
- Document.getElementsByTagNameNS(namespaceURI, localName)¶
Поиск всех потомков (прямых детей, детей детей и т. д.) с определенным URI пространства имен и локальным именем. Локальное имя - это часть пространства имен после префикса.
Объекты элементов¶
Element
является подклассом Node
, поэтому наследует все атрибуты этого класса.
- Element.tagName¶
Имя типа элемента. В документе, использующем пространство имен, может содержать двоеточия. Значение - строка.
- Element.getElementsByTagName(tagName)¶
Аналогичен эквивалентному методу в классе
Document
.
- Element.getElementsByTagNameNS(namespaceURI, localName)¶
Аналогичен эквивалентному методу в классе
Document
.
- Element.hasAttribute(name)¶
Возвращает
True
, если элемент имеет атрибут с именем name.
- Element.hasAttributeNS(namespaceURI, localName)¶
Возвращает
True
, если элемент имеет атрибут, названный namespaceURI и localName.
- Element.getAttribute(name)¶
Возвращает значение атрибута, названного name, в виде строки. Если такого атрибута не существует, возвращается пустая строка, как если бы атрибут не имел значения.
- Element.getAttributeNode(attrname)¶
Возвращает узел
Attr
для атрибута, названного attrname.
- Element.getAttributeNS(namespaceURI, localName)¶
Возвращает значение атрибута, названного namespaceURI и localName, в виде строки. Если такого атрибута не существует, возвращается пустая строка, как если бы атрибут не имел значения.
- Element.getAttributeNodeNS(namespaceURI, localName)¶
Возвращает значение атрибута в виде узла, заданного namespaceURI и localName.
- Element.removeAttribute(name)¶
Удаление атрибута по имени. Если нет подходящего атрибута, выдается сообщение
NotFoundErr
.
- Element.removeAttributeNode(oldAttr)¶
Удаляет и возвращает oldAttr из списка атрибутов, если он присутствует. Если oldAttr не присутствует, то будет поднят
NotFoundErr
.
- Element.removeAttributeNS(namespaceURI, localName)¶
Удаление атрибута по имени. Обратите внимание, что используется localName, а не qname. Исключение не возникает, если нет подходящего атрибута.
- Element.setAttribute(name, value)¶
Установка значения атрибута из строки.
- Element.setAttributeNode(newAttr)¶
Добавляет новый узел атрибутов к элементу, при необходимости заменяя существующий атрибут, если совпадает атрибут
name
. Если замена произошла, будет возвращен старый узел атрибута. Если newAttr уже используется, будет вызвано сообщениеInuseAttributeErr
.
- Element.setAttributeNodeNS(newAttr)¶
Добавляет новый узел атрибутов к элементу, при необходимости заменяя существующий атрибут, если атрибуты
namespaceURI
иlocalName
совпадают. Если замена произошла, будет возвращен старый узел атрибута. Если newAttr уже используется, будет выдано сообщениеInuseAttributeErr
.
- Element.setAttributeNS(namespaceURI, qname, value)¶
Установка значения атрибута из строки, заданной namespaceURI и qname. Обратите внимание, что qname - это полное имя атрибута. Это отличается от приведенного выше.
Объекты Attr¶
Attr
наследуется от Node
, поэтому наследует все его атрибуты.
- Attr.name¶
Имя атрибута. В документе, использующем пространство имен, оно может включать двоеточие.
- Attr.localName¶
Часть имени, следующая за двоеточием, если оно есть, иначе все имя. Этот атрибут доступен только для чтения.
- Attr.prefix¶
Часть имени, предшествующая двоеточию, если оно есть, иначе - пустая строка.
- Attr.value¶
Текстовое значение атрибута. Это синоним атрибута
nodeValue
.
Объекты NamedNodeMap¶
NamedNodeMap
не наследуется от Node
.
- NamedNodeMap.length¶
Длина списка атрибутов.
- NamedNodeMap.item(index)¶
Возвращает атрибут с определенным индексом. Порядок, в котором вы получаете атрибуты, произвольный, но он будет неизменным в течение всего времени существования DOM. Каждый элемент - это узел атрибута. Получите его значение с помощью атрибута
value
.
Существуют также экспериментальные методы, которые дают этому классу больше возможностей для отображения. Вы можете использовать их или стандартное семейство методов getAttribute*()
для объектов Element
.
Объекты текста и CDATASection¶
Интерфейс Text
представляет текст в XML-документе. Если парсер и реализация DOM поддерживают расширение XML DOM, части текста, заключенные в секции с пометкой CDATA, хранятся в объектах CDATASection
. Эти два интерфейса идентичны, но предоставляют разные значения для атрибута nodeType
.
Эти интерфейсы расширяют интерфейс Node
. Они не могут иметь дочерних узлов.
- Text.data¶
Содержимое текстового узла в виде строки.
Примечание
Использование узла CDATASection
не указывает на то, что узел представляет собой полный раздел с маркировкой CDATA, а только на то, что содержимое узла является частью раздела CDATA. Один раздел CDATA может быть представлен более чем одним узлом в дереве документа. Не существует способа определить, представляют ли два соседних узла CDATASection
разные разделы с пометкой CDATA.
ОбработкаИнструкцииОбъекты¶
Представляет инструкцию по обработке в XML-документе; наследует интерфейс Node
и не может иметь дочерних узлов.
- ProcessingInstruction.target¶
Содержимое инструкции обработки до первого пробельного символа. Этот атрибут доступен только для чтения.
- ProcessingInstruction.data¶
Содержимое инструкции обработки, следующей за первым пробельным символом.
Исключения¶
Рекомендация DOM Level 2 определяет единственное исключение, DOMException
, и ряд констант, которые позволяют приложениям определять, какого рода ошибка произошла. Экземпляры DOMException
несут атрибут code
, который предоставляет соответствующее значение для конкретного исключения.
Интерфейс Python DOM предоставляет константы, но также расширяет набор исключений таким образом, что для каждого из кодов исключений, определенных DOM, существует свое специфическое исключение. Реализации должны вызывать соответствующие специфические исключения, каждое из которых имеет соответствующее значение для атрибута code
.
- exception xml.dom.DOMException¶
Базовый класс исключений, используемый для всех специфических исключений DOM. Этот класс исключений не может быть непосредственно инстанцирован.
- exception xml.dom.DomstringSizeErr¶
Возникает, когда указанный диапазон текста не помещается в строку. Известно, что это не используется в реализациях DOM на Python, но может быть получено от реализаций DOM, написанных не на Python.
- exception xml.dom.HierarchyRequestErr¶
Возникает при попытке вставить узел, тип которого недопустим.
- exception xml.dom.IndexSizeErr¶
Возникает, когда параметр index или size метода отрицателен или превышает допустимые значения.
- 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 в соответствии со следующей таблицей.
Тип IDL |
Тип Python |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
Методы доступа¶
Отображение из 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
.
Python DOM API, однако, требует, чтобы работал обычный доступ к атрибутам. Это означает, что типичные суррогаты, генерируемые компиляторами Python IDL, скорее всего, не будут работать, и на клиенте могут потребоваться объекты-обертки, если доступ к объектам DOM осуществляется через CORBA. Хотя это и требует некоторых дополнительных размышлений для клиентов CORBA DOM, реализаторы, имеющие опыт использования DOM через CORBA из Python, не считают это проблемой. Атрибуты, объявленные как readonly
, могут не ограничивать доступ на запись во всех реализациях DOM.
В Python DOM API функции доступа не требуются. Если они предоставляются, то должны иметь форму, определенную отображением Python IDL, но эти методы считаются ненужными, поскольку атрибуты доступны непосредственно из Python. Аксессоры «Set» никогда не должны предоставляться для атрибутов readonly
.
Определения IDL не полностью отражают требования W3C DOM API, например, понятие того, что некоторые объекты, такие как возвращаемое значение getElementsByTagName()
, должны быть «живыми». Python DOM API не требует от реализаций соблюдения таких требований.
Объекты комментариев¶
Comment
представляет собой комментарий в XML-документе. Он является подклассомNode
, но не может иметь дочерних узлов.Содержимое комментария в виде строки. Атрибут содержит все символы между ведущим
<!-
-
и последующим-
->
, но не включает их.