xml.dom — The Document Object Model 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. Як це досягається, взагалі не описано в DOM рівня 1, а рівень 2 передбачає лише обмежені покращення: існує клас об’єктів DOMImplementation, який надає доступ до методів створення Document, але не має можливості отримати доступ до зчитувача/аналізатора XML/конструктора документів у спосіб, незалежний від реалізації. Також немає чітко визначеного способу доступу до цих методів без наявного об’єкта Document. У Python кожна реалізація DOM надаватиме функцію getDOMImplementation(). DOM Level 3 додає специфікацію Load/Store, яка визначає інтерфейс для читача, але це ще не доступно в стандартній бібліотеці Python.

Якщо у вас є об’єкт документа DOM, ви можете отримати доступ до частин свого документа XML через його властивості та методи. Ці властивості визначені в специфікації DOM; ця частина довідкового посібника описує інтерпретацію специфікації в Python.

Специфікація, надана W3C, визначає DOM API для Java, ECMAScript і OMG IDL. Визначене тут відображення Python значною мірою базується на версії специфікації IDL, але сувора відповідність не потрібна (хоча реалізації можуть вільно підтримувати суворе відображення з IDL). Перегляньте розділ Відповідність для детального обговорення вимог до відображення.

Дивись також

Специфікація рівня 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. Фабрична функція має повертати об’єкт, який реалізує інтерфейс DOMImplementation. Фабрична функція може щоразу повертати той самий об’єкт або новий для кожного виклику, залежно від конкретної реалізації (наприклад, якщо ця реалізація підтримує певні налаштування).

xml.dom.getDOMImplementation(name=None, features=())

Поверніть відповідну реалізацію DOM. Ім’я є або добре відомим, ім’ям модуля реалізації DOM, або None. Якщо це не None, імпортує відповідний модуль і повертає об’єкт DOMImplementation, якщо імпорт вдасться. Якщо ім’я не вказано та встановлено змінну середовища PYTHON_DOM, ця змінна використовується для пошуку реалізації.

Якщо ім’я не вказано, перевіряються доступні реалізації, щоб знайти одну з потрібним набором функцій. Якщо впровадження не знайдено, викликайте ImportError. Список функцій має бути послідовністю пар (функція, версія), які передаються в метод 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 також можна використовувати як вузли, а не як прості рядки. Однак це доводиться робити досить рідко, тому таке використання ще не задокументовано.

Інтерфейс

Розділ

призначення

DOMIimplementation

Об’єкти реалізації DOMI

Інтерфейс базової реалізації.

Node

Об’єкти Node

Базовий інтерфейс для більшості об’єктів у документі.

NodeList

Об’єкти NodeList

Інтерфейс для послідовності вузлів.

DocumentType

Об’єкти DocumentType

Інформація про декларації, необхідні для оформлення документа.

Document

Об’єкти документа

Об’єкт, який представляє весь документ.

Element

Об’єкти елементів

Вузли елементів в ієрархії документа.

Attr

Об’єкти Attr

Вузли значення атрибута на вузлах елемента.

Comment

Об’єкти коментарів

Відображення коментарів у вихідному документі.

Text

Текст і об’єкти CDATASection

Вузли, що містять текстовий вміст із документа.

ProcessingInstruction

Об’єкти інструкцій обробки

Представлення інструкцій обробки.

Додатковий розділ описує винятки, визначені для роботи з DOM у Python.

Об’єкти реалізації DOMI

Інтерфейс DOMImplementation надає програмам спосіб визначити доступність певних функцій у DOM, який вони використовують. Рівень 2 DOM також додав можливість створювати нові об’єкти 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.

Об’єкти 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 рівня 3 DOM, який все ще перебуває на стадії «робочої чернетки», але цей конкретний інтерфейс не викликає суперечок. Зміни від W3C не обов’язково вплинуть на цей метод в інтерфейсі Python DOM (хоча будь-який новий API W3C для цього також підтримуватиметься).

Node.appendChild(newChild)

Додайте новий дочірній вузол до цього вузла в кінці списку дочірніх, повертаючи newChild. Якщо вузол уже був у дереві, його спочатку видаляють.

Node.insertBefore(newChild, refChild)

Вставте новий дочірній вузол перед існуючим дочірнім вузлом. Має бути так, що refChild є дочірнім для цього вузла; якщо ні, виникає ValueError. newChild повертається. Якщо refChild має значення None, він вставляє newChild у кінець списку дітей.

Node.removeChild(oldChild)

Видаліть дочірній вузол. oldChild має бути дочірнім для цього вузла; якщо ні, виникає ValueError. oldChild повертається в разі успіху. Якщо oldChild більше не використовуватиметься, слід викликати його метод unlink().

Node.replaceChild(newChild, oldChild)

Замініть існуючий вузол на новий. Має бути так, що oldChild є дочірнім для цього вузла; якщо ні, виникає ValueError.

Node.normalize()

Об’єднайте сусідні текстові вузли, щоб усі фрагменти тексту зберігалися як окремі екземпляри Text. Це спрощує обробку тексту з дерева DOM для багатьох програм.

Node.cloneNode(deep)

Клонуйте цей вузол. Установка deep також означає клонування всіх дочірніх вузлів. Це повертає клон.

Об’єкти NodeList

NodeList представляє послідовність вузлів. У рекомендації DOM Core ці об’єкти використовуються двома способами: об’єкт Element надає один як свій список дочірніх вузлів, а методи getElementsByTagName() і getElementsByTagNameNS() Node повертає об’єкти з цим інтерфейсом для представлення результатів запиту.

Рекомендація DOM рівня 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 представляє весь 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

Attr успадковує Node, тому успадковує всі його атрибути.

Attr.name

Назва атрибута. У документі, що використовує простір імен, він може містити двокрапку.

Attr.localName

Частина назви після двокрапки, якщо вона є, інакше повна назва. Це атрибут лише для читання.

Attr.prefix

Частина назви перед двокрапкою, якщо вона є, інакше порожній рядок.

Attr.value

Текстове значення атрибута. Це синонім атрибута nodeValue.

Об’єкти NamedNodeMap

NamedNodeMap не успадковує Node.

NamedNodeMap.length

Довжина списку атрибутів.

NamedNodeMap.item(index)

Повертає атрибут із певним індексом. Порядок, у якому ви отримуєте атрибути, є довільним, але буде незмінним протягом життя DOM. Кожен елемент є вузлом атрибута. Отримайте його значення за допомогою атрибута value.

There are also experimental methods that give this class more mapping behavior. You can use them or you can use the standardized getAttribute*() family of methods on the Element objects.

Об’єкти коментарів

Comment представляє коментар у документі XML. Це підклас Node, але не може мати дочірні вузли.

Comment.data

Вміст коментаря у вигляді рядка. Атрибут містить усі символи між початковими <!-- and trailing -->, але не включає їх.

Текст і об’єкти CDATASection

Інтерфейс Text представляє текст у документі XML. Якщо синтаксичний аналізатор і реалізація DOM підтримують розширення XML DOM, частини тексту, укладені в розділи, позначені CDATA, зберігаються в об’єктах CDATASection. Ці два інтерфейси ідентичні, але надають різні значення для атрибута nodeType.

Ці інтерфейси розширюють інтерфейс Node. Вони не можуть мати дочірні вузли.

Text.data

Вміст текстового вузла у вигляді рядка.

Примітка

Використання вузла CDATASection не означає, що вузол представляє повний розділ, позначений CDATA, лише те, що вміст вузла був частиною розділу CDATA. Один розділ CDATA може бути представлений декількома вузлами в дереві документів. Немає способу визначити, чи два суміжні вузли CDATASection представляють різні розділи, позначені CDATA.

Об’єкти інструкцій обробки

Представляє інструкцію обробки в документі XML; це успадковує інтерфейс Node і не може мати дочірні вузли.

ProcessingInstruction.target

Вміст інструкції обробки до першого пробілу. Це атрибут лише для читання.

ProcessingInstruction.data

Вміст інструкції обробки після першого пробілу.

Винятки

Рекомендація DOM рівня 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

Відповідність

У цьому розділі описано вимоги до відповідності та зв’язки між Python DOM API, рекомендаціями W3C DOM і відображенням OMG IDL для Python.

Відображення типу

Типи IDL, які використовуються в специфікації DOM, зіставляються з типами Python відповідно до наступної таблиці.

Тип IDL

Тип Python

логічний

bool або int

int

int

long int

int

unsigned int

int

DOMString

str або bytes

нуль

Жодного

Методи доступу

Відображення з OMG IDL на Python визначає функції доступу для оголошень атрибутів 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.

Однак Python DOM API не вимагає, щоб звичайний доступ до атрибутів працював. Це означає, що типові сурогати, згенеровані компіляторами Python IDL, навряд чи працюватимуть, і об’єкти-огортки можуть знадобитися на клієнті, якщо доступ до об’єктів DOM здійснюється через CORBA. Хоча для клієнтів CORBA DOM це вимагає додаткового розгляду, розробники з досвідом використання DOM поверх CORBA з Python не вважають це проблемою. Атрибути, оголошені лише для читання, можуть не обмежувати доступ для запису в усіх реалізаціях DOM.

В Python DOM API функції доступу не потрібні. Якщо вони надані, вони мають приймати форму, визначену відображенням Python IDL, але ці методи вважаються непотрібними, оскільки атрибути доступні безпосередньо з Python. Аксесори «Set» ніколи не повинні надаватися для атрибутів «лише для читання».

Визначення IDL не повністю втілюють вимоги W3C DOM API, такі як поняття певних об’єктів, таких як значення, що повертається getElementsByTagName(), бути «живими». Python DOM API не вимагає реалізацій для виконання таких вимог.