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.
Содержание модуля
В xml.dom содержатся следующие функции:
-
xml.dom.registerDOMImplementation(name, factory) -
Регистрация функции factory с именем name. Функция factory должна возвращать объект, реализующий интерфейс
DOMImplementation. Функция factory может возвращать один и тот же объект каждый раз или новый для каждого вызова, как это подходит для конкретной реализации (например, если эта реализация поддерживает некоторую настройку).
-
xml.dom.getDOMImplementation(name=None, features=()) -
Возвращает подходящую реализацию DOM. name может быть общеизвестным именем, именем модуля реализации DOM или
None. Если это неNone, импортирует соответствующий модуль и возвращает объектDOMImplementationпри успешном импорте. Если имя не задано и переменная окруженияPYTHON_DOMустановлена, эта переменная используется для поиска реализации.Если имя не задано, это анализирует доступные реализации, чтобы найти одну с требуемым набором функций. Если реализация не найдена, генерируется исключение
ImportError. Список функций должен быть последовательностью пар(feature, version), которые передаются методуhasFeature()доступным объектамDOMImplementation.
Также предоставляются некоторые удобные константы:
-
xml.dom.EMPTY_NAMESPACE -
Значение, используемое для обозначения отсутствия пространства имён, связанного с узлом в DOM. Обычно это обнаруживается как
namespaceURIузла или используется в качестве параметра namespaceURI для метода, специфичного для пространств имён.
-
xml.dom.XML_NAMESPACE -
URI пространства имён, связанного с зарезервированным префиксом
xml, как определено в Пространства имён в XML (раздел 4).
-
xml.dom.XMLNS_NAMESPACE -
URI пространства имён для объявлений пространств имён, как определено в Спецификация уровня 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.
Объекты 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 Python DOM первые два аргумента также могут быть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 -
Список объектов атрибутов. Только у элементов есть фактические значения для этого; другие предоставляют
Noneдля этого атрибута. Это атрибут только для чтения.
-
Node.previousSibling -
Узел, непосредственно предшествующий данному узлу с тем же родителем. Например, элемент с закрывающим тегом, который находится непосредственно перед открывающим тегом элемента. Конечно, XML-документы состоят не только из элементов, поэтому предыдущий узел может быть текстом, комментарием или чем-то еще. Если этот узел является первым дочерним элементом родителя, этот атрибут будет
None. Это атрибут только для чтения.
-
Node.nextSibling -
Узел, непосредственно следующий за этим узлом с тем же родителем. См. также
previousSibling. Если это последний дочерний элемент родителя, этот атрибут будетNone. Это атрибут только для чтения.
-
Node.childNodes -
Список узлов, содержащихся в этом узле. Это атрибут только для чтения.
-
Node.firstChild -
Первый дочерний узел узла, если таковые имеются, или
None. Это атрибут только для чтения.
-
Node.lastChild -
Последний дочерний узел узла, если таковые имеются, или
None. Это атрибут только для чтения.
-
Node.localName -
Часть
tagNameпосле двоеточия, если она есть, в противном случае весьtagName. Значение — строка.
-
Node.prefix -
Часть
tagNameперед двоеточием, если она есть, в противном случае пустая строка. Значение — строка илиNone.
-
Node.namespaceURI -
Пространство имен, связанное с именем элемента. Будет строкой или
None. Это атрибут только для чтения.
-
Node.nodeName -
Значение этого атрибута отличается для каждого типа узла; см. спецификацию DOM для подробностей. Вы всегда можете получить информацию, которую вы здесь получите, из другого свойства, например, свойства
tagNameдля элементов или свойстваnameдля атрибутов. Для всех типов узлов значение этого атрибута будет либо строкой, либоNone. Это атрибут только для чтения.
-
Node.nodeValue -
Значение этого атрибута отличается для каждого типа узла; см. спецификацию DOM для подробностей. Ситуация аналогична той, что с
nodeName. Значение — строка илиNone.
-
Node.hasAttributes() -
Возвращает
True, если у узла есть атрибуты.
-
Node.hasChildNodes() -
Возвращает
True, если у узла есть дочерние узлы.
-
Node.isSameNode(other) -
Возвращает
True, если other относится к тому же узлу, что и этот узел. Это особенно полезно для реализаций DOM, которые используют какую-либо архитектуру прокси (потому что более одного объекта может ссылаться на один узел).Примечание
Это основано на предлагаемом API DOM уровня 3, который все еще находится на стадии «рабочего черновика», но этот конкретный интерфейс кажется бесспорным. Изменения от W3C не обязательно повлияют на этот метод в интерфейсе Python DOM (хотя любой новый API W3C для этого также будет поддерживаться).
-
Node.appendChild(newChild) -
Добавляет новый дочерний узел к этому узлу в конец списка дочерних элементов, возвращая newChild. Если узел уже находился в дереве, он удаляется сначала.
-
Node.insertBefore(newChild, refChild) -
Вставляет новый дочерний узел перед существующим дочерним элементом. refChild должен быть дочерним элементом этого узла; в противном случае генерируется
ValueError. Возвращает newChild. Если refChild равенNone, вставляет newChild в конец списка дочерних элементов.
-
Node.removeChild(oldChild) -
Удаляет дочерний узел. oldChild должен быть дочерним элементом этого узла; в противном случае генерируется
ValueError. oldChild возвращается при успехе. Если oldChild больше не будет использоваться, для него должен быть вызван методunlink().
-
Node.replaceChild(newChild, oldChild) -
Заменяет существующий узел новым узлом. oldChild должен быть дочерним элементом этого узла; в противном случае генерируется
ValueError.
-
Node.normalize() -
Объединяет смежные текстовые узлы, так что все фрагменты текста хранятся как отдельные экземпляры
Text. Это упрощает обработку текста из дерева DOM для многих приложений.
-
Node.cloneNode(deep) -
Создает копию этого узла. Если параметр deep имеет значение True, то будут скопированы и все дочерние узлы. Возвращает копию.
Объекты 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__().
Объекты 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) -
Удаляет атрибут по имени. Обратите внимание, что используется локальное имя, а не полное имя. Исключение не генерируется, если соответствующий атрибут не найден.
-
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 поддерживает расширение DOM для XML, части текста, заключённые в секции с маркировкой 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, который предоставляет соответствующее значение для конкретного исключения.
Интерфейс 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, отображаются на описанные выше исключения в соответствии с этой таблицей:
Константа | Исключение |
|---|---|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
Соответствие
В этом разделе описаны требования к соответствию и взаимосвязь между Python DOM API, рекомендациями 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 не требует от реализаций применять такие требования.
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/xml.dom.html
Объекты Comment
Commentпредставляет комментарий в XML-документе. Это подклассNode, но не может иметь дочерние узлы.Comment.dataСодержание комментария в виде строки. Атрибут содержит все символы между открывающим
<!--и закрывающим-->тегами, но не включает их.