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 уровня 2.
Приложения DOM обычно начинаются с парсинг некоторых XML в DOM. То, как это
выполняется, вообще не охватывается уровнем 1 DOM, а уровень 2 обеспечивает
только ограниченные улучшения: существует класс объектов DOMImplementation
, который
предоставляет доступ к методам создания Document
, но не позволяет получить
доступ к построителю XML- читатель/парсер/Документ независимо от реализации.
Кроме того, нет четкого способа доступа к этим методам без существующего объекта
Document
. В Python, каждая реализация DOM обеспечивает функциональную
getDOMImplementation()
. DOM уровня 3 добавляет спецификацию Загрузки/Хранения, которая определяет
интерфейс для устройства чтения, но она пока недоступна в стандартной библиотеке
Python.
После создания объекта документа DOM можно получить доступ к частям документа XML с помощью его свойств и методов. Эти свойства определены в спецификации DOM; эта часть справочного руководства описывает интерпретацию спецификации в Python.
Спецификация, предоставленная W3C, определяет DOM API для Java, ECMAScript и OMG IDL. Определенное здесь сопоставление Python в значительной степени основано на IDL-версии спецификации, но строгое соответствие не требуется (хотя реализации могут поддерживать строгое сопоставление из IDL). Подробное обсуждение требований к сопоставлению см. в разделе Соответствие.
См.также
- Спецификация уровня 2 объектной модели документа (DOM)
- Рекомендация W3C, на которой базируется API Python DOM.
- Спецификация объектной модели документа (DOM) уровня 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 пространства имен для объявлений пространства имен, как определено в Базовая спецификация уровня 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-атрибуты также может обрабатываться как узлы, а не как простые строки. Это довольно редко, что вы должны сделать это, поэтому это использование еще не задокументировано.
Интерфейс | Раздел | Цель |
---|---|---|
DOMImplementation |
Объекты DOMImplementation | Интерфейс к базовой реализации. |
Node |
Объекты узла | Базовый интерфейс для большинства объектов документа. |
NodeList |
Объекты списка узлов | Интерфейс для последовательности узлов. |
DocumentType |
Объекты типа документа | Сведения о декларациях, необходимых для обработки документа. |
Document |
Объекты документа | Объект, представляющий весь документ. |
Element |
Объекты элемента | Узлы элементов в иерархии документов. |
Attr |
Объекты-атрибуты | Узлы значение атрибутов на узлах элементов. |
Comment |
Объекты комментариев | Представление комментариев в исходном документе. |
Text |
Текст и объекты CDATASection | Узлы, содержащие текстовое содержимое документа. |
ProcessingInstruction |
Объекты ProcessingInstruction | Обработка представления команды. |
В дополнительном разделе описываются исключения, определенные для работы с DOM в Python.
Объекты 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
. В 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
¶ Узел, который непосредственно предшествует этому узлу, имеет один и тот же родительский узел. Для сущность элемента с конечным тегом, который находится непосредственно перед начальным тегом самого элемента. Конечно, 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 уровня 3 DOM, который все еще находится на стадии «рабочего черновика», но этот конкретный интерфейс представляется бесспорным. Изменения от W3C не обязательно затронут этот метод в интерфейсе Python DOM (хотя любой новый W3C API для этого был бы также поддержан).
-
Node.
appendChild
(newChild)¶ Добавить новый дочерний узел к этому узлу в конце списка дочерних узлов, возвращая newChild. Если узел уже был в дереве, он удаляется первым.
-
Node.
insertBefore
(newChild, refChild)¶ Вставка нового дочернего узла перед существующим дочерним узлом. Это должен быть случай, когда refChild является потомком этого узла; если нет,
ValueError
поднимается. newChild - это возвращенный. Если refChildNone
, он вставляет newChild в конец списка детей.
-
Node.
removeChild
(oldChild)¶ Удаление дочернего узла. oldChild должен быть дочерним для этого узла; если нет,
ValueError
поднимается. oldChild возвращенный на успех. Если oldChild не будет используемый дальше, следует вызвать его методunlink()
.
-
Node.
replaceChild
(newChild, oldChild)¶ Заменить существующий узел на новый. Это должен быть случай, когда oldChild является потомком этого узла; если нет,
ValueError
поднимается.
-
Node.
normalize
()¶ Соедините смежных текстовых узлов таким образом, чтобы все отрезки текста сохранялись как отдельные
Text
сущности. Это упрощает обработку текста из дерева DOM для многих приложений.
-
Node.
cloneNode
(deep)¶ Клонировать этот узел. Установка deep означает клонирование всех дочерних узлов. Возвращает клон.
Объекты списка узлов¶
NodeList
представляет последовательность узлов. Объекты используются
двумя способами в основной рекомендации DOM: объект 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
для документа доступен из
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)¶ Создать и вернуть узел команд обработки, содержащий 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
наследует от Node
, так наследует все его атрибуты.
-
Attr.
name
¶ Имя атрибута. В документе, использующем пространство имен, он может содержать двоеточие.
-
Attr.
localName
¶ Часть имени, следующая за двоеточием, если оно есть, в противном случае все имя. Это атрибут только для чтения.
-
Attr.
prefix
¶ Часть имени, предшествующая двоеточию, если она есть, иначе пустая строка.
-
Attr.
value
¶ Текстовое значение атрибута. Это синоним атрибут
nodeValue
.
Объекты NamedNiveMap¶
NamedNodeMap
не наследуется от Node
.
-
NamedNodeMap.
length
¶ Длина списка атрибутов.
-
NamedNodeMap.
item
(index)¶ Возвращает атрибут с определенным индексом. Порядок, в котором вы получаете атрибуты, является произвольным, но будет согласованным для жизни DOM. Каждый элемент является атрибутом узла. Получите его значение с
value
атрибут.
Существуют также экспериментальные методы, которые дают этому классу больше
поведения отображения. Их можно использовать или можно использовать
стандартизированное семейство методов getAttribute*()
для Element
объектов.
Объекты комментариев¶
Comment
представляет комментарий в XML-документе. Это подкласс
Node
, но не может иметь дочерних узлов.
-
Comment.
data
¶ Содержание комментария как строка. Этот атрибут содержит все символы между ведущим
<!-
-
и конечным-
->
, но не включает их.
Текст и объекты 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 уровня 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
¶ Если попытка изменить какой-либо объект способом, который не разрешен в отношении рекомендации по Пространства имен в 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 |
Соответствие¶
В этом разделе описываются требования к соответствию и взаимосвязи между API DOM Python, рекомендациями DOM W3C и отображением IDL OMG для Python.
Сопоставление типов¶
Типы IDL, используемый в спецификации DOM, сопоставляются с типами Python в соответствии со следующей таблицей.
IDL тип | Python тип |
---|---|
boolean |
bool или int |
int |
int |
long int |
int |
unsigned int |
int |
DOMString |
str или bytes |
null |
None |
Методы доступа¶
Отображение из OMG IDL в Python определяет функции доступа для объявлений
IDL attribute
в значительной степени так же, как отображение Java.
Сопоставление IDL-объявлений:
readonly attribute string someValue;
attribute string anotherValue;
дает три функции доступа: метод «get» для someValue
(_get_someValue()
) и методы «get»
и «set» для anotherValue
(_get_anotherValue()
и _set_anotherValue()
).
Отображение, в частности, не требует, чтобы атрибуты IDL были доступны как обычные Python атрибуты:
object.someValue
не требуется для работы и может вызвать AttributeError
.
Однако API Python DOM не требует нормального доступа к
атрибуту. Это означает, что типичные суррогаты, сгенерированные компиляторами
IDL Python, вряд ли будут работать, и объекты-оболочки могут потребоваться
клиенту, если доступ к объектам DOM осуществляется через CORBA. Хотя это требует
дополнительного рассмотрения для клиентов CORBA DOM, реализаторы, имеющие опыт
использования DOM вместо CORBA из Python, не считают это проблемой.
Атрибуты, объявленные readonly
, не могут ограничивать доступ на запись во всех
реализациях DOM.
В Python DOM API функции доступа не требуются. Если обеспечено, они должны
принять форму, определенную отображением Python IDL, но эти методы считают
ненужными, так как атрибуты доступны непосредственно от Python. Средства
доступа «Set» никогда не должны предоставляться для readonly
атрибуты.
Определения IDL не полностью воплощают требования W3C DOM API, такие как понятие
определенных объектов, таких как возвращает значение getElementsByTagName()
, будучи
«живыми». API DOM Python не требует реализации таких требований.