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 Level 2.
Обычно DOM-приложения начинают с разбора XML в DOM. DOM Level 1 вообще не рассматривает, как это делается, а Level 2 лишь немного улучшает ситуацию: существует класс объекта DOMImplementation, предоставляющий доступ к методам создания Document, но отсутствует независимый от реализации способ получить доступ к средству чтения/анализатору XML или построителю Document. Также не существует чётко определённого способа получить доступ к этим методам без уже имеющегося объекта Document. В Python каждая реализация DOM предоставляет функцию getDOMImplementation(). DOM Level 3 добавляет спецификацию Load/Store, определяющую интерфейс средства чтения, однако она пока недоступна в стандартной библиотеке Python.
Получив объект DOM-документа, вы можете обращаться к частям XML-документа через его свойства и методы. Эти свойства определены в спецификации DOM; в этой части справочного руководства описывается интерпретация спецификации в Python.
Спецификация W3C определяет API DOM для Java, ECMAScript и OMG IDL. Сопоставление с Python, описанное здесь, в значительной степени основано на версии спецификации для IDL, однако строгое соответствие не является обязательным (хотя реализации могут поддерживать строгое сопоставление с IDL). Подробное обсуждение требований к сопоставлению см. в разделе Соответствие.
См. также
- Спецификация объектной модели документа (DOM) Level 2
-
Рекомендация W3C, на которой основан API DOM для Python.
- Спецификация объектной модели документа (DOM) Level 1
-
Рекомендация 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 пространства имён для объявлений пространств имён, как определено в Основной спецификации объектной модели документа (DOM) Level 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.
Объекты в 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. В API DOM для Python первые два аргумента также могут иметь значениеNone, указывающее, что дочерний узелElementсоздавать не нужно.
-
DOMImplementation.createDocumentType(qualifiedName, publicId, systemId) -
Возвращает новый объект
DocumentType, содержащий заданные строки qualifiedName, publicId и systemId, представляющие сведения из объявления типа XML-документа.
Объекты Node
Все компоненты 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 -
Узел, непосредственно предшествующий этому узлу и имеющий того же родителя. Например, это элемент с закрывающим тегом, расположенный непосредственно перед открывающим тегом элемента 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 не обязательно повлияют на этот метод в интерфейсе DOM для Python (хотя любой новый 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 -
Количество узлов в последовательности.
Кроме того, интерфейс DOM для Python требует предоставления дополнительной поддержки, позволяющей использовать объекты 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
Объект 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 пространства имён и локальным именем. Локальное имя — это часть имени в пространстве имён после префикса.
Объекты Element
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.
Объекты Text и CDATASection
Интерфейс Text представляет текст в XML-документе. Если парсер и реализация DOM поддерживают расширение XML для DOM, фрагменты текста, заключённые в разделы CDATA, хранятся в объектах CDATASection. Эти два интерфейса идентичны, но предоставляют разные значения атрибута nodeType.
Эти интерфейсы расширяют интерфейс Node. У них не может быть дочерних узлов.
-
Text.data -
Содержимое текстового узла в виде строки.
Примечание
Использование узла CDATASection не означает, что узел представляет целый раздел CDATA, а лишь указывает, что его содержимое было частью раздела CDATA. Один раздел CDATA может быть представлен несколькими узлами в дереве документа. Невозможно определить, представляют ли два соседних узла CDATASection разные разделы CDATA.
Объекты ProcessingInstruction
Представляет инструкцию обработки в XML-документе; этот интерфейс наследует интерфейс Node и не может иметь дочерних узлов.
-
ProcessingInstruction.target -
Содержимое инструкции обработки до первого символа пробела. Это атрибут только для чтения.
-
ProcessingInstruction.data -
Содержимое инструкции обработки после первого символа пробела.
Исключения
Рекомендация DOM Level 2 определяет одно исключение — DOMException — и ряд констант, позволяющих приложениям определить тип возникшей ошибки. Экземпляры DOMException содержат атрибут code, которому присваивается соответствующее значение для конкретного исключения.
Интерфейс DOM для Python предоставляет эти константы, а также расширяет набор исключений, так что для каждого кода исключения, определённого DOM, существует отдельное исключение. Реализации должны вызывать соответствующее конкретное исключение, каждое из которых содержит соответствующее значение атрибута code.
-
exception xml.dom.DOMException -
Базовый класс исключений для всех конкретных исключений DOM. Непосредственно создать экземпляр этого класса исключения нельзя.
-
exception xml.dom.DomstringSizeErr -
Возникает, если указанный диапазон текста не помещается в строку. Известно, что реализации DOM для Python не используют это исключение, однако оно может быть получено от реализаций 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, соответствуют описанным выше исключениям согласно следующей таблице:
Константа | Исключение |
|---|---|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
Соответствие требованиям
В этом разделе описаны требования к соответствию и взаимосвязи между API DOM для Python, рекомендациями W3C DOM и отображением OMG IDL для Python.
Отображение типов
Типы IDL, используемые в спецификации DOM, отображаются в типы Python согласно следующей таблице.
Тип IDL | Тип Python |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
Методы доступа
Отображение OMG IDL в Python определяет функции доступа для объявлений attribute IDL примерно так же, как отображение 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 DOM для Python требует, чтобы обычный доступ к атрибутам работал. Это означает, что типичные прокси-объекты, генерируемые компиляторами IDL для Python, скорее всего, не будут работать, и при доступе к объектам DOM через CORBA на стороне клиента могут понадобиться объекты-обёртки. Хотя для клиентов DOM на основе CORBA это требует некоторых дополнительных мер, разработчики с опытом использования DOM через CORBA из Python не считают это проблемой. Атрибуты, объявленные как readonly, могут не ограничивать доступ на запись во всех реализациях DOM.
В API DOM для Python функции доступа не обязательны. Если они предоставляются, их следует реализовать в форме, определённой отображением IDL для Python, однако такие методы считаются излишними, поскольку атрибуты доступны непосредственно из Python. Для атрибутов readonly никогда не следует предоставлять функции доступа «set».
Определения IDL не полностью отражают требования API W3C DOM, например понятие «живых» объектов, таких как возвращаемое значение getElementsByTagName(). API DOM для Python не требует от реализаций соблюдения таких требований.
© 2001 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/library/xml.dom.html
Объекты Comment
Commentпредставляет комментарий в XML-документе. Это подклассNode, который не может иметь дочерних узлов.Comment.dataСодержимое комментария в виде строки. Атрибут содержит все символы между начальным
<!--и конечным-->маркерами, не включая их.