xml.dom — API för dokumentobjektmodellen

Källkod: Lib/xml/dom/__init__.py


Document Object Model, eller ”DOM”, är ett språköverskridande API från World Wide Web Consortium (W3C) för åtkomst till och modifiering av XML-dokument. En DOM-implementering presenterar ett XML-dokument som en trädstruktur, eller låter klientkoden bygga upp en sådan struktur från grunden. Den ger sedan tillgång till strukturen genom en uppsättning objekt som har välkända gränssnitt.

DOM är extremt användbart för applikationer med slumpmässig åtkomst. Med SAX kan du bara se en del av dokumentet åt gången. Om du tittar på ett SAX-element har du ingen tillgång till ett annat. Om du tittar på en textnod har du ingen åtkomst till ett innehållande element. När du skriver en SAX-applikation måste du hålla reda på ditt programs position i dokumentet någonstans i din egen kod. SAX gör inte det åt dig. Om du behöver titta framåt i XML-dokumentet har du inte heller någon tur.

Vissa applikationer är helt enkelt omöjliga i en händelsestyrd modell utan tillgång till ett träd. Naturligtvis kan du bygga något slags träd själv i SAX-händelser, men DOM gör att du kan undvika att skriva den koden. DOM är en standardiserad trädrepresentation för XML-data.

Document Object Model definieras av W3C i etapper, eller ”nivåer” i deras terminologi. Python-mappningen av API:et är i huvudsak baserad på DOM Level 2-rekommendationen.

DOM-tillämpningar börjar vanligtvis med att analysera XML till en DOM. Hur detta görs täcks inte alls av DOM Level 1, och Level 2 ger endast begränsade förbättringar: Det finns en DOMImplementation-objektklass som ger tillgång till Document-skapandemetoder, men inget sätt att få tillgång till en XML-läsare/parser/dokumentbyggare på ett implementeringsoberoende sätt. Det finns inte heller något väldefinierat sätt att komma åt dessa metoder utan ett befintligt Document-objekt. I Python kommer varje DOM-implementering att tillhandahålla en funktion getDOMImplementation(). DOM Level 3 lägger till en Load/Store-specifikation, som definierar ett gränssnitt till läsaren, men detta är ännu inte tillgängligt i Pythons standardbibliotek.

När du har ett DOM-dokumentobjekt kan du komma åt delarna av ditt XML-dokument genom dess egenskaper och metoder. Dessa egenskaper definieras i DOM-specifikationen; denna del av referenshandboken beskriver tolkningen av specifikationen i Python.

Den specifikation som tillhandahålls av W3C definierar DOM API för Java, ECMAScript och OMG IDL. Den Python-mappning som definieras här baseras till stor del på IDL-versionen av specifikationen, men strikt överensstämmelse krävs inte (även om implementationer är fria att stödja den strikta mappningen från IDL). Se avsnitt Överensstämmelse för en detaljerad diskussion om mappningskrav.

Se även

Dokumentobjektmodell (DOM) Nivå 2-specifikation

W3C:s rekommendation som Pythons DOM API bygger på.

Dokumentobjektmodell (DOM) Nivå 1-specifikation

W3C:s rekommendation för DOM som stöds av xml.dom.minidom.

Specifikation för språkmappning för Python

Detta specificerar mappningen från OMG IDL till Python.

Modulens innehåll

xml.dom innehåller följande funktioner:

xml.dom.registerDOMImplementation(name, factory)

Registrera funktionen factory med namnet name. Fabriksfunktionen bör returnera ett objekt som implementerar gränssnittet DOMImplementation. Fabriksfunktionen kan returnera samma objekt varje gång, eller ett nytt för varje anrop, beroende på vad som är lämpligt för den specifika implementationen (t.ex. om implementationen stöder viss anpassning).

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

Returnerar en lämplig DOM-implementering. name är antingen välkänt, modulnamnet på en DOM-implementering eller None. Om det inte är None importeras motsvarande modul och returnerar ett DOMImplementation-objekt om importen lyckas. Om inget namn anges, och om miljövariabeln PYTHON_DOM är inställd, används denna variabel för att hitta implementationen.

Om namnet inte anges undersöks de tillgängliga implementationerna för att hitta en med de funktioner som krävs. Om ingen implementering kan hittas, uppstår ett ImportError. Listan med funktioner måste vara en sekvens av paren (funktion, version) som skickas till metoden hasFeature() på tillgängliga objekt av DOMImplementation.

Vissa bekvämlighetskonstanter tillhandahålls också:

xml.dom.EMPTY_NAMESPACE

Det värde som används för att ange att inget namnrymd är associerat med en nod i DOM. Detta återfinns vanligtvis som namespaceURI för en nod, eller används som namespaceURI-parameter till en namnrymdsspecifik metod.

xml.dom.XML_NAMESPACE

Namnrymds-URI som associeras med det reserverade prefixet xml, enligt definitionen i Namnrymder i XML (avsnitt 4).

xml.dom.XMLNS_NAMESPACE

Namnrymds-URI för namnrymdsdeklarationer, enligt definitionen i Document Object Model (DOM) Level 2 Core Specification (avsnitt 1.1.8).

xml.dom.XHTML_NAMESPACE

URI för XHTML-namnrymden enligt definitionen i XHTML 1.0: The Extensible HyperText Markup Language (avsnitt 3.1.1).

Dessutom innehåller xml.dom en basklass Node och DOM-undantagsklasserna. Klassen Node som tillhandahålls av denna modul implementerar inte några av de metoder eller attribut som definieras av DOM-specifikationen; konkreta DOM-implementeringar måste tillhandahålla dessa. Klassen Node som tillhandahålls som en del av denna modul tillhandahåller de konstanter som används för attributet nodeType på konkreta Node-objekt; de är placerade inom klassen snarare än på modulnivå för att överensstämma med DOM-specifikationerna.

Objekt i DOM:en

Den slutgiltiga dokumentationen för DOM är DOM-specifikationen från W3C.

Observera att DOM-attribut också kan manipuleras som noder istället för som enkla strängar. Det är dock ganska ovanligt att du måste göra detta, så denna användning är ännu inte dokumenterad.

Gränssnitt

Sektion

Syfte

DOMImplementation

DOMImplementeringsobjekt

Gränssnitt till den underliggande implementationen.

Node

Objekt för noder

Basgränssnitt för de flesta objekt i ett dokument.

NodeList

NodeList-objekt

Gränssnitt för en sekvens av noder.

DocumentType

Objekt av typen DocumentType

Information om de deklarationer som krävs för att behandla ett dokument.

Dokument

Dokumentobjekt

Objekt som representerar ett helt dokument.

Element

Element Objects

Elementnoder i dokumenthierarkin.

Attr

Attr-objekt

Attributvärdesnoder på elementnoder.

Kommentar

Kommentar Objekt

Representation av kommentarer i källdokumentet.

Text

Text och CDATASektionsobjekt

Noder som innehåller textinnehåll från dokumentet.

Bearbetningsinstruktion

BearbetningInstruktionsobjekt

Representation av bearbetningsinstruktioner.

I ett ytterligare avsnitt beskrivs de undantag som definierats för att arbeta med DOM i Python.

DOMImplementeringsobjekt

Gränssnittet DOMImplementation ger applikationer möjlighet att avgöra om vissa funktioner är tillgängliga i den DOM de använder. DOM Level 2 lade till möjligheten att skapa nya Document- och DocumentType-objekt med hjälp av DOMImplementation också.

DOMImplementation.hasFeature(feature, version)

Returnerar True om den funktion som identifieras av strängparet feature och version är implementerad.

DOMImplementation.createDocument(namespaceUri, qualifiedName, doctype)

Returnerar ett nytt Document-objekt (DOM:s rot), med ett underordnat Element-objekt som har de angivna namespaceUri och qualifiedName. doctype måste vara ett DocumentType-objekt som skapats av createDocumentType(), eller None. I Python DOM API kan de två första argumenten också vara None för att indikera att inget Element-barn ska skapas.

DOMImplementation.createDocumentType(qualifiedName, publicId, systemId)

Returnerar ett nytt DocumentType-objekt som kapslar in de angivna strängarna qualifiedName, publicId och systemId, som representerar informationen i en XML-dokumenttypsdeklaration.

Objekt för noder

Alla komponenter i ett XML-dokument är underklasser till Node.

Node.nodeType

Ett heltal som representerar nodtypen. Symboliska konstanter för typerna finns på objektet Node: ELEMENT_NODE, ATTRIBUTE_NODE, TEXT_NODE, CDATA_SECTION_NODE, ENTITY_NODE, PROCESSING_INSTRUCTION_NODE, COMMENT_NODE, DOCUMENT_NODE, DOCUMENT_TYPE_NODE, NOTATION_NODE. Detta är ett skrivskyddat attribut.

Node.parentNode

Den aktuella nodens förälder, eller None för dokumentnoden. Värdet är alltid ett Node-objekt eller None. För Element-noder kommer detta att vara det överordnade elementet, förutom för rotelementet, i vilket fall det kommer att vara Document-objektet. För Attr-noder är detta alltid None. Detta är ett skrivskyddat attribut.

Node.attributes

En NamedNodeMap av attributobjekt. Endast element har faktiska värden för detta; andra tillhandahåller None för detta attribut. Detta är ett skrivskyddat attribut.

Node.previousSibling

Den nod som omedelbart föregår denna med samma förälder. Till exempel elementet med en end-tagg som kommer precis före self-elementets start-tagg. Naturligtvis består XML-dokument av mer än bara element, så det föregående syskonet kan vara text, en kommentar eller något annat. Om denna nod är det första barnet till föräldern, kommer detta attribut att vara None. Detta är ett skrivskyddat attribut.

Node.nextSibling

Den nod som omedelbart följer denna med samma förälder. Se även previousSibling. Om detta är det sista barnet till föräldern, kommer detta attribut att vara None. Detta är ett skrivskyddat attribut.

Node.childNodes

En lista över noder som ingår i denna nod. Detta är ett skrivskyddat attribut.

Node.firstChild

Nodens första barn, om det finns några, eller None. Detta är ett skrivskyddat attribut.

Node.lastChild

Nodens sista barn, om det finns några, eller None. Detta är ett skrivskyddat attribut.

Node.localName

Den del av tagName som följer efter kolon om det finns ett sådant, annars hela tagName. Värdet är en sträng.

Node.prefix

Den del av tagName som föregår kolon om det finns ett sådant, annars den tomma strängen. Värdet är en sträng eller None.

Node.namespaceURI

Namnrymden som är associerad med elementnamnet. Detta kommer att vara en sträng eller None. Detta är ett skrivskyddat attribut.

Node.nodeName

Detta har olika betydelse för varje nodtyp; se DOM-specifikationen för detaljer. Du kan alltid få den information du skulle få här från en annan egenskap, t.ex. egenskapen tagName för element eller egenskapen name för attribut. För alla nodtyper kommer värdet på detta attribut att vara antingen en sträng eller None. Detta är ett skrivskyddat attribut.

Node.nodeValue

Detta har olika betydelse för varje nodtyp; se DOM-specifikationen för detaljer. Situationen är liknande den med nodeName. Värdet är en sträng eller None.

Node.hasAttributes()

Returnerar True om noden har några attribut.

Node.hasChildNodes()

Returnerar True om noden har några underordnade noder.

Node.isSameNode(other)

Returnerar True om other refererar till samma nod som den här noden. Detta är särskilt användbart för DOM-implementeringar som använder någon form av proxyarkitektur (eftersom mer än ett objekt kan referera till samma nod).

Anteckning

Detta är baserat på ett föreslaget DOM Level 3 API som fortfarande är i ”working draft”-stadiet, men just detta gränssnitt verkar okontroversiellt. Ändringar från W3C kommer inte nödvändigtvis att påverka denna metod i Pythons DOM-gränssnitt (även om alla nya W3C API för detta också skulle stödjas).

Node.appendChild(newChild)

Lägger till en ny barnnod till denna nod i slutet av listan med barn och returnerar newChild. Om noden redan fanns i trädet tas den bort först.

Node.insertBefore(newChild, refChild)

Infogar en ny underordnad nod före en befintlig underordnad nod. Det måste vara så att refChild är ett barn till denna nod; om så inte är fallet, ValueError tas upp. newChild returneras. Om refChild är None, infogas newChild i slutet av listan över barn.

Node.removeChild(oldChild)

Tar bort en underordnad nod. oldChild måste vara ett barn till den här noden; om så inte är fallet, ValueError. oldChild returneras vid framgång. Om oldChild inte kommer att användas vidare, bör dess unlink()-metod anropas.

Node.replaceChild(newChild, oldChild)

Ersätter en befintlig nod med en ny nod. Det måste vara så att oldChild är ett barn till den här noden; om så inte är fallet, ValueError.

Node.normalize()

Sammanfogar intilliggande textnoder så att alla textavsnitt lagras som en enda Text-instans. Detta förenklar bearbetningen av text från ett DOM-träd för många tillämpningar.

Node.cloneNode(deep)

Klona den här noden. Om du anger deep klonas även alla underordnade noder. Detta returnerar klonen.

NodeList-objekt

En NodeList representerar en sekvens av noder. Dessa objekt används på två sätt i DOM Core-rekommendationen: ett Element-objekt tillhandahåller ett sådant som sin lista över underordnade noder, och metoderna getElementsByTagName() och getElementsByTagNameNS() i Node returnerar objekt med detta gränssnitt för att representera sökresultat.

DOM Level 2-rekommendationen definierar en metod och ett attribut för dessa objekt:

NodeList.item(i)

Returnerar det i:e objektet från sekvensen, om det finns ett sådant, eller None. Indexet i får inte vara mindre än noll eller större än eller lika med sekvensens längd.

NodeList.length

Antalet noder i sekvensen.

Dessutom kräver Python DOM-gränssnittet att ytterligare stöd tillhandahålls för att NodeList-objekt ska kunna användas som Python-sekvenser. Alla NodeList-implementationer måste innehålla stöd för __len__() och __getitem__(); detta möjliggör iteration över NodeList i for-satser och korrekt stöd för den inbyggda funktionen len().

Om en DOM-implementation stöder ändring av dokumentet måste NodeList-implementationen också stödja metoderna __setitem__() och __delitem__().

Objekt av typen DocumentType

Information om de notationer och enheter som deklareras av ett dokument (inklusive den externa delmängden om parsern använder den och kan tillhandahålla informationen) finns tillgänglig från ett DocumentType-objekt. DocumentType för ett dokument finns tillgängligt från Document-objektets doctype-attribut; om det inte finns någon DOCTYPE-deklaration för dokumentet kommer dokumentets doctype-attribut att sättas till None istället för en instans av detta gränssnitt.

DocumentType är en specialisering av Node, och lägger till följande attribut:

DocumentType.publicId

Den offentliga identifieraren för den externa delmängden av dokumenttypens definition. Detta kommer att vara en sträng eller None.

DocumentType.systemId

Systemidentifieraren för den externa delmängden av dokumenttypsdefinitionen. Detta kommer att vara en URI som en sträng, eller None.

DocumentType.internalSubset

En sträng som ger den fullständiga interna delmängden från dokumentet. Detta inkluderar inte de parenteser som omsluter delmängden. Om dokumentet inte har någon intern delmängd bör detta vara None.

DocumentType.name

Namnet på rotelementet som anges i DOCTYPE-deklarationen, om sådan finns.

DocumentType.entities

Detta är en NamedNodeMap som innehåller definitioner av externa entiteter. För entitetsnamn som definieras mer än en gång anges endast den första definitionen (övriga ignoreras enligt XML-rekommendationen). Detta kan vara None om informationen inte tillhandahålls av parsern, eller om inga entiteter är definierade.

DocumentType.notations

Detta är en NamedNodeMap som innehåller definitioner av notationer. För notationsnamn som definieras mer än en gång, anges endast den första definitionen (övriga ignoreras enligt XML-rekommendationen). This may be None if the information is not provided by the parser, or if no notations are defined.

Dokumentobjekt

En Document representerar ett helt XML-dokument, inklusive dess ingående element, attribut, bearbetningsinstruktioner, kommentarer etc. Kom ihåg att den ärver egenskaper från Node.

Document.documentElement

Det enda rotelementet i dokumentet.

Document.createElement(tagName)

Skapa och returnera en ny elementnod. Elementet infogas inte i dokumentet när det skapas. Du måste uttryckligen infoga det med någon av de andra metoderna, t.ex. insertBefore() eller appendChild().

Document.createElementNS(namespaceURI, tagName)

Skapar och returnerar ett nytt element med en namnrymd. tagName kan ha ett prefix. Elementet infogas inte i dokumentet när det skapas. Du måste uttryckligen infoga det med någon av de andra metoderna, t.ex. insertBefore() eller appendChild().

Document.createTextNode(data)

Skapar och returnerar en textnod som innehåller de data som skickats som parameter. Precis som med de andra skapandemetoderna infogas inte noden i trädet med denna metod.

Document.createComment(data)

Skapar och returnerar en kommentarsnod som innehåller de data som angetts som parameter. Precis som med de andra skapandemetoderna infogar den här inte noden i trädet.

Document.createProcessingInstruction(target, data)

Skapar och returnerar en nod för bearbetningsinstruktioner som innehåller target och data som angetts som parametrar. Precis som med de andra skapandemetoderna infogas inte noden i trädet med den här metoden.

Document.createAttribute(name)

Skapar och returnerar en attributnod. Denna metod associerar inte attributnoden med något särskilt element. Du måste använda setAttributeNode() på det lämpliga Element-objektet för att använda den nyskapade attributinstansen.

Document.createAttributeNS(namespaceURI, qualifiedName)

Skapar och returnerar en attributnod med en namnrymd. tagName kan ha ett prefix. Den här metoden associerar inte attributnoden med något särskilt element. Du måste använda setAttributeNode() på det lämpliga Element-objektet för att använda den nyskapade attributinstansen.

Document.getElementsByTagName(tagName)

Sök efter alla ättlingar (direkta barn, barns barn etc.) med ett visst elementtypnamn.

Document.getElementsByTagNameNS(namespaceURI, localName)

Sök efter alla ättlingar (direkta barn, barns barn etc.) med en viss namespace URI och ett visst lokalt namn. Det lokala namnet är den del av namnrymden som kommer efter prefixet.

Element Objects

Element är en subklass av Node och ärver därför alla attribut från den klassen.

Element.tagName

Namnet på elementtypen. I ett dokument som använder namnrymd kan det innehålla kolon. Värdet är en sträng.

Element.getElementsByTagName(tagName)

Samma som motsvarande metod i Document-klassen.

Element.getElementsByTagNameNS(namespaceURI, localName)

Samma som motsvarande metod i Document-klassen.

Element.hasAttribute(name)

Returnerar True om elementet har ett attribut med namnet name.

Element.hasAttributeNS(namespaceURI, localName)

Returnerar True om elementet har ett attribut som namnges av namespaceURI och localName.

Element.getAttribute(name)

Returnerar värdet på attributet som namnges av name som en sträng. Om inget sådant attribut finns returneras en tom sträng, som om attributet inte hade något värde.

Element.getAttributeNode(attrname)

Returnerar Attr-noden för det attribut som namnges av attrname.

Element.getAttributeNS(namespaceURI, localName)

Returnerar värdet på attributet som namnges av namespaceURI och localName som en sträng. Om inget sådant attribut finns returneras en tom sträng, som om attributet inte hade något värde.

Element.getAttributeNodeNS(namespaceURI, localName)

Returnerar ett attributvärde som en nod, givet ett namespaceURI och localName.

Element.removeAttribute(name)

Ta bort ett attribut genom att ange dess namn. Om det inte finns något matchande attribut genereras en NotFoundErr.

Element.removeAttributeNode(oldAttr)

Tar bort och returnerar oldAttr från attributlistan, om den finns. Om oldAttr inte finns, genereras NotFoundErr.

Element.removeAttributeNS(namespaceURI, localName)

Ta bort ett attribut med namn. Observera att det använder ett localName, inte ett qname. Inget undantag görs om det inte finns något matchande attribut.

Element.setAttribute(name, value)

Ställ in ett attributvärde från en sträng.

Element.setAttributeNode(newAttr)

Lägger till en ny attributnod till elementet och ersätter ett befintligt attribut om nödvändigt om attributet name matchar. Om en ersättning sker kommer den gamla attributnoden att returneras. Om newAttr redan är i bruk, kommer InuseAttributeErr att visas.

Element.setAttributeNodeNS(newAttr)

Lägger till en ny attributnod till elementet och ersätter ett befintligt attribut om nödvändigt om attributen namespaceURI och localName matchar. Om en ersättning sker kommer den gamla attributnoden att returneras. Om newAttr redan är i bruk, kommer InuseAttributeErr att utlösas.

Element.setAttributeNS(namespaceURI, qname, value)

Ställ in ett attributvärde från en sträng, givet ett namespaceURI och ett qname. Observera att ett qname är hela attributnamnet. Detta är annorlunda än ovan.

Attr-objekt

Attr ärver från Node, och ärver därför alla dess attribut.

Attr.name

Attributets namn. I ett dokument som använder namnrymd kan det innehålla ett kolon.

Attr.localName

Den del av namnet som följer efter kolon om det finns ett sådant, annars hela namnet. Detta är ett skrivskyddat attribut.

Attr.prefix

Den del av namnet som föregår kolon om det finns ett sådant, annars den tomma strängen.

Attr.value

Attributets textvärde. Detta är en synonym till attributet nodeValue.

NamedNodeMap-objekt

NamedNodeMap ärver inte från Node.

NamedNodeMap.length

Längden på attributlistan.

NamedNodeMap.item(index)

Returnerar ett attribut med ett visst index. Ordningen du får attributen i är godtycklig men kommer att vara konsekvent under hela DOM:ens livslängd. Varje objekt är en attributnod. Hämta dess värde med attributet value.

Det finns också experimentella metoder som ger den här klassen mer mappningsbeteende. Du kan använda dem eller så kan du använda den standardiserade getAttribute*()-familjen av metoder på Element-objekten.

Kommentar Objekt

Comment representerar en kommentar i XML-dokumentet. Den är en underklass till Node, men kan inte ha underordnade noder.

Comment.data

Innehållet i kommentaren som en sträng. Attributet innehåller alla tecken mellan det inledande <!-- och det efterföljande -->, men inkluderar dem inte.

Text och CDATASektionsobjekt

Gränssnittet Text representerar text i XML-dokumentet. Om parsern och DOM-implementationen stöder DOM:s XML-tillägg lagras delar av texten som är inneslutna i CDATA-markerade avsnitt i CDATASection-objekt. Dessa två gränssnitt är identiska, men ger olika värden för attributet nodeType.

Dessa gränssnitt utökar gränssnittet Node. De kan inte ha underordnade noder.

Text.data

Innehållet i textnoden som en sträng.

Anteckning

Användningen av en CDATASection-nod innebär inte att noden representerar ett fullständigt CDATA-markerat avsnitt, utan endast att innehållet i noden var en del av ett CDATA-avsnitt. Ett enda CDATA-avsnitt kan representeras av mer än en nod i dokumentträdet. Det finns inget sätt att avgöra om två intilliggande CDATASection-noder representerar olika CDATA-markerade avsnitt.

BearbetningInstruktionsobjekt

Representerar en bearbetningsinstruktion i XML-dokumentet; den ärver från gränssnittet Node och kan inte ha underordnade noder.

ProcessingInstruction.target

Innehållet i bearbetningsinstruktionen fram till det första blankstegstecknet. Detta är ett skrivskyddat attribut.

ProcessingInstruction.data

Innehållet i bearbetningsinstruktionen efter det första blankstegstecknet.

Undantag

DOM Level 2-rekommendationen definierar ett enda undantag, DOMException, och ett antal konstanter som gör det möjligt för applikationer att avgöra vilken typ av fel som inträffade. DOMException-instanser har ett code-attribut som ger det lämpliga värdet för det specifika undantaget.

Python DOM-gränssnittet tillhandahåller konstanterna, men utökar också uppsättningen undantag så att ett specifikt undantag finns för var och en av de undantagskoder som definieras av DOM. Implementationerna måste ge upphov till lämpliga specifika undantag, som var och en har det lämpliga värdet för attributet code.

exception xml.dom.DOMException

Basundantagsklass som används för alla specifika DOM-undantag. Denna undantagsklass kan inte instansieras direkt.

exception xml.dom.DomstringSizeErr

Utlöses när ett angivet textområde inte ryms i en sträng. Det är inte känt att detta används i Pythons DOM-implementationer, men kan tas emot från DOM-implementationer som inte är skrivna i Python.

exception xml.dom.HierarchyRequestErr

Utlöses när ett försök görs att infoga en nod där nodtypen inte är tillåten.

exception xml.dom.IndexSizeErr

Utlöses när en index- eller size-parameter i en metod är negativ eller överskrider de tillåtna värdena.

exception xml.dom.InuseAttributeErr

Uppstår när ett försök görs att infoga en Attr-nod som redan finns någon annanstans i dokumentet.

exception xml.dom.InvalidAccessErr

Utlöses om en parameter eller en operation inte stöds av det underliggande objektet.

exception xml.dom.InvalidCharacterErr

Detta undantag uppstår när en strängparameter innehåller ett tecken som inte är tillåtet i det sammanhang där det används enligt XML 1.0-rekommendationen. Om man t.ex. försöker skapa en Element-nod med ett mellanslag i elementtypens namn, kommer detta fel att uppstå.

exception xml.dom.InvalidModificationErr

Utlöses när ett försök görs att ändra typen av en nod.

exception xml.dom.InvalidStateErr

Utlöses när ett försök görs att använda ett objekt som inte är definierat eller inte längre kan användas.

exception xml.dom.NamespaceErr

Om ett försök görs att ändra ett objekt på ett sätt som inte är tillåtet med hänsyn till rekommendationen Namespaces in XML, kommer detta undantag att aktiveras.

exception xml.dom.NotFoundErr

Undantag när en nod inte finns i den refererade kontexten. Till exempel kommer NamedNodeMap.removeNamedItem() att ge upphov till detta om noden som skickas in inte finns i kartan.

exception xml.dom.NotSupportedErr

Utlöses när implementationen inte stöder den begärda typen av objekt eller åtgärd.

exception xml.dom.NoDataAllowedErr

Denna fråga ställs om data anges för en nod som inte stöder data.

exception xml.dom.NoModificationAllowedErr

Utlöses vid försök att modifiera ett objekt där modifieringar inte är tillåtna (t.ex. för skrivskyddade noder).

exception xml.dom.SyntaxErr

Utlöses när en ogiltig eller olaglig sträng anges.

exception xml.dom.WrongDocumentErr

Uppstår när en nod infogas i ett annat dokument än det som den för närvarande tillhör, och implementeringen inte stöder migrering av noden från ett dokument till ett annat.

De undantagskoder som definieras i DOM-rekommendationen motsvarar de undantag som beskrivs ovan enligt denna tabell:

Konstant

Undantag

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 (ingen modifiering tillåten)

SYNTAX_ERR

SyntaxErr

WRONG_DOCUMENT_ERR

WrongDocumentErr

Överensstämmelse

I detta avsnitt beskrivs överensstämmelsekraven och relationerna mellan Python DOM API, W3C DOM-rekommendationerna och OMG IDL-mappningen för Python.

Mappning av typ

De IDL-typer som används i DOM-specifikationen mappas till Python-typer enligt följande tabell.

IDL-typ

Python-typ

boolean

bool eller int

int

int

long int

int

unsigned int

int

DOMString

str eller bytes

null

None

Accessor-metoder

Mappningen från OMG IDL till Python definierar accessorfunktioner för IDL attribut-deklarationer på ungefär samma sätt som Java-mappningen gör. Mappning av IDL-deklarationer

readonly attribut sträng someValue;
         attribut sträng anotherValue;

ger tre accessorfunktioner: en ”get”-metod för someValue (_get_someValue()), och ”get”- och ”set”-metoder för anotherValue (_get_anotherValue() och _set_anotherValue()). Mappningen kräver i synnerhet inte att IDL-attributen är tillgängliga som vanliga Python-attribut: object.someValue är inte nödvändigt för att fungera, och kan ge upphov till ett AttributeError.

Python DOM API kräver dock att normal attributåtkomst fungerar. Detta innebär att de typiska surrogaten som genereras av Python IDL-kompilatorer sannolikt inte kommer att fungera, och omslagsobjekt kan behövas på klienten om DOM-objekten nås via CORBA. Även om detta kräver lite extra hänsyn för CORBA DOM-klienter, anser implementatörerna med erfarenhet av att använda DOM över CORBA från Python inte att detta är ett problem. Attribut som deklareras som readonly kanske inte begränsar skrivåtkomst i alla DOM-implementeringar.

I Python DOM API krävs inte accessorfunktioner. Om de tillhandahålls bör de ha den form som definieras av Python IDL-mappningen, men dessa metoder anses vara onödiga eftersom attributen är tillgängliga direkt från Python. ”Set”-accessorer bör aldrig tillhandahållas för readonly-attribut.

IDL-definitionerna förkroppsligar inte helt kraven i W3C DOM API, såsom begreppet att vissa objekt, såsom returvärdet av getElementsByTagName(), är ”live”. Python DOM API kräver inte att implementationer upprätthåller sådana krav.