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). Подробное обсуждение требований к сопоставлению см. в разделе Соответствие.
См. также
- Спецификация уровня 2 модели объекта документа (DOM)
- Рекомендация W3C, на которой основана API Python DOM.
- Спецификация уровня 1 модели объекта документа (DOM)
- Рекомендация W3C для DOM, поддерживаемого
xml.dom.minidom. - Спецификация сопоставления языка Python
- В ней описывается сопоставление OMG IDL с Python.
1. Содержимое модуля
Модуль xml.dom содержит следующие функции:
-
xml.dom.registerDOMImplementation(name, factory) -
Регистрирует функцию-фабрику factory с именем name. Функция-фабрика должна возвращать объект, реализующий интерфейс
DOMImplementation. Функция-фабрика может каждый раз возвращать один и тот же объект или новый для каждого вызова, что подходит для конкретной реализации (например, если эта реализация поддерживает некоторую настройку).
-
xml.dom.getDOMImplementation(name=None, features=()) -
Возвращает подходящую реализацию DOM. name — это общеизвестное имя, имя модуля реализации DOM или
None. Если это неNone, импортирует соответствующий модуль и возвращает объектDOMImplementation, если импорт успешен. Если имя не указано и переменная окруженияPYTHON_DOMустановлена, используется эта переменная для поиска реализации.Если имя не указано, проверяются доступные реализации, чтобы найти реализацию с необходимым набором функций. Если реализация не найдена, возникает исключение
ImportError. Список функций должен быть последовательностью пар(feature, version), которые передаются методуhasFeature()доступных объектовDOMImplementation.
Также предоставляются некоторые удобные константы:
-
xml.dom.EMPTY_NAMESPACE -
Значение, используемое для указания отсутствия пространства имен, связанного с узлом в DOM. Обычно оно встречается как
namespaceURIузла или используется в качестве параметра namespaceURI для метода, специфичного для пространств имен.
-
xml.dom.XML_NAMESPACE -
URI пространства имен, связанного с зарезервированным префиксом
xml, как определено в Пространства имен в XML (раздел 4).
-
xml.dom.XMLNS_NAMESPACE -
URI пространства имен для объявлений пространств имен, как определено в Спецификации уровня 2 ядра модели объекта документа (DOM) (раздел 1.1.8).
-
xml.dom.XHTML_NAMESPACE -
URI пространства имен XHTML, как определено в XHTML 1.0: Расширяемый язык разметки гипертекста (раздел 3.1.1).
Кроме того, xml.dom содержит базовый класс Node и классы исключений DOM. Класс Node, предоставляемый этим модулем, не реализует ни одного из методов или атрибутов, определенных спецификацией DOM; конкретные реализации DOM должны их предоставить. Класс Node, предоставляемый в рамках этого модуля, предоставляет константы, используемые для атрибута nodeType у конкретных объектов Node; они расположены внутри класса, а не на уровне модуля, чтобы соответствовать спецификациям DOM.
2. Объекты DOM
Окончательная документация для DOM — это спецификация DOM от W3C.
Обратите внимание, что атрибуты DOM также могут быть обработаны как узлы вместо простых строк. Однако это довольно редкое использование, поэтому оно пока не документировано.
| Интерфейс | Раздел | Назначение |
|---|---|---|
DOMImplementation | Объекты DOMImplementation | Интерфейс к базовой реализации. |
Node | Объекты Node | Базовый интерфейс для большинства объектов в документе. |
NodeList | Объекты NodeList | Интерфейс для последовательности узлов. |
DocumentType | Объекты DocumentType | Информация о декларациях, необходимых для обработки документа. |
Document | Объекты Document | Объект, представляющий весь документ. |
Element | Объекты Element | Элементные узлы в иерархии документа. |
Attr | Объекты Attr | Узлы значений атрибутов в узлах элементов. |
Comment | Объекты Comment | Представление комментариев в исходном документе. |
Text | Объекты Text и CDATASection | Узлы, содержащие текстовое содержимое документа. |
ProcessingInstruction | Объекты ProcessingInstruction | Представление инструкции обработки. |
Дополнительный раздел описывает исключения, определенные для работы с DOM в Python.
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. В API Python DOM первые два аргумента также могут быть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 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 означает клонирование всех дочерних узлов также. Возвращается клон.
2.3. Объекты 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__().
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) -
Создаёт и возвращает новый элемент с пространством имён. Имя_тега может иметь префикс. Элемент не вставляется в документ при создании. Вам необходимо явно вставить его с помощью одного из других методов, таких как
insertBefore()илиappendChild().
-
Document.createTextNode(data) -
Создаёт и возвращает текстовый узел, содержащий переданные данные в качестве параметра. Как и другие методы создания, этот метод не вставляет узел в дерево.
-
Document.createComment(data) -
Создаёт и возвращает узел комментария, содержащий переданные данные в качестве параметра. Как и другие методы создания, этот метод не вставляет узел в дерево.
-
Document.createProcessingInstruction(target, data) -
Создаёт и возвращает узел инструкции обработки, содержащий переданные в качестве параметров значения target и data. Как и другие методы создания, этот метод не вставляет узел в дерево.
-
Document.createAttribute(name) -
Создаёт и возвращает узел атрибута. Этот метод не связывает узел атрибута с каким-либо конкретным элементом. Вы должны использовать
setAttributeNode()на соответствующем объектеElementдля использования нового экземпляра атрибута.
-
Document.createAttributeNS(namespaceURI, qualifiedName) -
Создаёт и возвращает узел атрибута с пространством имён. Имя_тега может иметь префикс. Этот метод не связывает узел атрибута с каким-либо конкретным элементом. Вы должны использовать
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) -
Удаляет атрибут по имени. Обратите внимание, что он использует локальное имя, а не полное имя. Исключение не возбуждается, если соответствующего атрибута нет.
-
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
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. Исключения
Рекомендация 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, сопоставлены с описанными выше исключениями в соответствии с этой таблицей:
| Константа | Исключение |
|---|---|
DOMSTRING_SIZE_ERR | DomstringSizeErr |
HIERARCHY_REQUEST_ERR | HierarchyRequestErr |
INDEX_SIZE_ERR | IndexSizeErr |
INUSE_ATTRIBUTE_ERR | InuseAttributeErr |
INVALID_ACCESS_ERR | InvalidAccessErr |
INVALID_CHARACTER_ERR | InvalidCharacterErr |
INVALID_MODIFICATION_ERR | InvalidModificationErr |
INVALID_STATE_ERR | InvalidStateErr |
NAMESPACE_ERR | NamespaceErr |
NOT_FOUND_ERR | NotFoundErr |
NOT_SUPPORTED_ERR | NotSupportedErr |
NO_DATA_ALLOWED_ERR | NoDataAllowedErr |
NO_MODIFICATION_ALLOWED_ERR | NoModificationAllowedErr |
SYNTAX_ERR | SyntaxErr |
WRONG_DOCUMENT_ERR | WrongDocumentErr |
3. Соответствие
Этот раздел описывает требования к соответствию и взаимосвязи между API Python DOM, рекомендациями W3C DOM и сопоставлением OMG IDL для Python.
3.1. Сопоставление типов
Типы IDL, используемые в спецификации DOM, сопоставляются с типами Python в соответствии со следующей таблицей.
| Тип IDL | Тип Python |
|---|---|
boolean |
bool или int
|
int | int |
long int | int |
unsigned int | int |
DOMString |
str или bytes
|
null | None |
3.2. Методы доступа
Сопоставление OMG IDL с Python определяет функции доступа для IDL attribute объявлений, аналогично тому, как это делается в Java. Сопоставление IDL объявлений
readonly attribute string someValue;
attribute string anotherValue;
генерирует три функции доступа: метод «получения» для someValue (_get_someValue()), и методы «получения» и «установки» для anotherValue (_get_anotherValue() и _set_anotherValue()). В частности, сопоставление не требует, чтобы IDL атрибуты были доступны как обычные атрибуты Python: object.someValue не требуется для работы и может вызвать AttributeError.
Однако API Python DOM требует, чтобы обычный доступ к атрибутам работал. Это означает, что типичные суррогаты, генерируемые компиляторами Python IDL, вряд ли будут работать, и могут потребоваться обертки для объектов клиента, если объекты DOM доступны через CORBA. Хотя это требует дополнительного рассмотрения для клиентов CORBA DOM, разработчики с опытом использования DOM через CORBA из Python не считают это проблемой. Атрибуты, объявленные readonly , могут не ограничивать доступ к записи во всех реализациях DOM.
В API Python DOM функции доступа не требуются. Если они предоставляются, они должны иметь вид, определённый сопоставлением Python IDL, но эти методы считаются ненужными, так как атрибуты непосредственно доступны из Python. Доступные средства «установки» не должны предоставляться для readonly атрибутов.
Определения IDL не полностью отражают требования API W3C DOM, такие как понятие о том, что определённые объекты, такие как возвращаемое значение getElementsByTagName(), являются «живыми». API Python DOM не требует от реализаций применять такие требования.
© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.5/library/xml.dom.html