XML-dokumentobjektmodell (DOM)
KLASSEN XML Document Object Model (DOM) är en minnesintern representation av ett XML-dokument. Med DOM kan du programmatiskt läsa, ändra och ändra ett XML-dokument. Klassen XmlReader läser även XML. Men den ger icke-cachelagrad, endast framåtriktad, skrivskyddad åtkomst. Det innebär att det inte finns några funktioner för att redigera värdena för ett attribut eller innehåll i ett element, eller möjligheten att infoga och ta bort noder med XmlReader. Redigering är den primära funktionen för DOM. Det är det vanliga och strukturerade sättet att XML-data representeras i minnet, även om de faktiska XML-data lagras linjärt när de är i en fil eller kommer in från ett annat objekt. Följande är XML-data.
Indata
<?xml version="1.0"?>
<books>
<book>
<author>Carson</author>
<price format="dollar">31.95</price>
<pubdate>05/01/2001</pubdate>
</book>
<pubinfo>
<publisher>MSPress</publisher>
<state>WA</state>
</pubinfo>
</books>
Följande bild visar hur minnet struktureras när dessa XML-data läss in i DOM-strukturen.
XML-dokumentstruktur
I XML-dokumentstrukturen representerar varje cirkel i den här bilden en nod, som kallas ett XmlNode-objekt . XmlNode-objektet är det grundläggande objektet i DOM-trädet. Klassen XmlDocument , som utökar XmlNode, stöder metoder för att utföra åtgärder i dokumentet som helhet (till exempel att läsa in det i minnet eller spara XML till en fil. Dessutom tillhandahåller XmlDocument ett sätt att visa och ändra noderna i hela XML-dokumentet. Både XmlNode och XmlDocument har prestanda- och användbarhetsförbättringar och har metoder och egenskaper för att:
Få åtkomst till och ändra noder som är specifika för DOM, till exempel elementnoder, entitetsreferensnoder och så vidare.
Hämta hela noder utöver den information som noden innehåller, till exempel texten i en elementnod.
Nodobjekt har en uppsättning metoder och egenskaper samt grundläggande och väldefinierade egenskaper. Några av dessa egenskaper är:
Noder har en enda överordnad nod, en överordnad nod som är en nod direkt ovanför dem. De enda noder som inte har en överordnad är dokumentroten, eftersom det är noden på den översta nivån och innehåller själva dokumentet och dokumentfragmenten.
De flesta noder kan ha flera underordnade noder, som är noder direkt under dem. Följande är en lista över nodtyper som kan ha underordnade noder.
Dokument
DocumentFragment
EntityReference
Element
Attribut
Noderna XmlDeclaration, Notation, Entity, CDATASection, Text, Comment, ProcessingInstruction och DocumentType har inte underordnade noder.
Noder som är på samma nivå, som representeras i diagrammet av bok - och pubinfonoderna , är syskon.
En egenskap hos DOM är hur den hanterar attribut. Attribut är inte noder som ingår i relationerna överordnad, underordnad och på samma nivå. Attribut anses vara en egenskap för elementnoden och består av ett namn och ett värdepar. Om du till exempel har XML-data som består av format="dollar
" som är associerade med elementet price
, är ordet format
namnet och värdet för format
attributet är dollar
. Om du vill hämta format="dollar"
attributet för prisnoden anropar du metoden GetAttribute när markören finns på elementnodenprice
. Mer information finns i Komma åt attribut i DOM.
När XML läss in i minnet skapas noder. Alla noder är dock inte av samma typ. Ett element i XML har andra regler och syntax än en bearbetningsinstruktion. Eftersom olika data läss tilldelas därför en nodtyp till varje nod. Den här nodtypen avgör nodens egenskaper och funktioner.
Mer information om de typer av noder som genereras i minnet finns i Typer av XML-noder. Mer information om de objekt som skapats i nodträdet finns i Mappa objekthierarkin till XML-data.
Microsoft har utökat DE API:er som är tillgängliga i World Wide Web Consortium (W3C) DOM Level 1 och Level 2 för att göra det enklare att arbeta med ett XML-dokument. De ytterligare klasserna, metoderna och egenskaperna stöder W3C-standarderna fullt ut, men lägger till funktioner utöver vad som kan göras med W3C XML DOM. Med nya klasser kan du komma åt relationsdata, vilket ger dig metoder för att synkronisera med ADO.NET data och samtidigt exponera data som XML. Mer information finns i Synkronisera en DataSet med en XmlDataDocument.
DOM är mest användbart för att läsa XML-data i minnet för att ändra dess struktur, lägga till eller ta bort noder eller ändra data som finns i en nod som i texten som finns i ett element. Andra klasser är dock tillgängliga som är snabbare än DOM i andra scenarier. För snabb, icke-cachelagrad, vidarebefordrad dataströmåtkomst till XML använder du XmlReader och XmlWriter. Om du behöver slumpmässig åtkomst med en markörmodell och XPath använder du klassen XPathNavigator .