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 ärNone
importeras motsvarande modul och returnerar ettDOMImplementation
-objekt om importen lyckas. Om inget namn anges, och om miljövariabelnPYTHON_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 metodenhasFeature()
på tillgängliga objekt avDOMImplementation
.
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 |
---|---|---|
|
Gränssnitt till den underliggande implementationen. |
|
|
Basgränssnitt för de flesta objekt i ett dokument. |
|
|
Gränssnitt för en sekvens av noder. |
|
|
Information om de deklarationer som krävs för att behandla ett dokument. |
|
|
Objekt som representerar ett helt dokument. |
|
|
Elementnoder i dokumenthierarkin. |
|
|
Attributvärdesnoder på elementnoder. |
|
|
Representation av kommentarer i källdokumentet. |
|
|
Noder som innehåller textinnehåll från dokumentet. |
|
|
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 underordnatElement
-objekt som har de angivna namespaceUri och qualifiedName. doctype måste vara ettDocumentType
-objekt som skapats avcreateDocumentType()
, ellerNone
. I Python DOM API kan de två första argumenten också varaNone
för att indikera att ingetElement
-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 ettNode
-objekt ellerNone
. FörElement
-noder kommer detta att vara det överordnade elementet, förutom för rotelementet, i vilket fall det kommer att varaDocument
-objektet. FörAttr
-noder är detta alltidNone
. Detta är ett skrivskyddat attribut.
- Node.attributes¶
En
NamedNodeMap
av attributobjekt. Endast element har faktiska värden för detta; andra tillhandahållerNone
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 varaNone
. 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 helatagName
. 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 ellerNone
.
- 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 egenskapenname
för attribut. För alla nodtyper kommer värdet på detta attribut att vara antingen en sträng ellerNone
. 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 ellerNone
.
- 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 ärNone
, 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 dessunlink()
-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 varaNone
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 beNone
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()
ellerappendChild()
.
- 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()
ellerappendChild()
.
- 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ämpligaElement
-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ämpligaElement
-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, kommerInuseAttributeErr
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
ochlocalName
matchar. Om en ersättning sker kommer den gamla attributnoden att returneras. Om newAttr redan är i bruk, kommerInuseAttributeErr
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.
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 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ö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 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
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.
Kommentar Objekt¶
Comment
representerar en kommentar i XML-dokumentet. Den är en underklass tillNode
, men kan inte ha underordnade noder.Innehållet i kommentaren som en sträng. Attributet innehåller alla tecken mellan det inledande
<!-
-
och det efterföljande-
->
, men inkluderar dem inte.