Delen via


De objecthiërarchie toewijzen aan XML-gegevens

Wanneer een XML-document zich in het geheugen bevindt, is de conceptuele weergave een structuur. Voor programmeren hebt u een objecthiërarchie voor toegang tot de knooppunten van de structuur. In het volgende voorbeeld ziet u hoe de XML-inhoud knooppunten wordt.

Terwijl de XML wordt ingelezen in het XML Document Object Model (DOM), worden de stukken omgezet in knooppunten en behouden deze knooppunten aanvullende metagegevens over zichzelf, zoals het knooppunttype en de waarden. Het knooppunttype is het object en bepaalt welke acties kunnen worden uitgevoerd en welke eigenschappen kunnen worden ingesteld of opgehaald.

Als u de volgende eenvoudige XML hebt:

Invoer

<book>  
    <title>The Handmaid's Tale</title>  
</book>  

De invoer wordt in het geheugen weergegeven als de volgende knooppuntstructuur met de eigenschap toegewezen knooppunttype:

example node tree
Structuurweergave boek- en titelknooppunt

Het book element wordt een XmlElement-object , het volgende element, titlewordt ook een XmlElement, terwijl de elementinhoud een XmlText-object wordt. Bij het bekijken van de XmlElement-methoden en -eigenschappen zijn de methoden en eigenschappen anders dan de methoden en eigenschappen die beschikbaar zijn voor een XmlText-object . Dus weten welk knooppunttype de XML-markering wordt, is essentieel, omdat het knooppunttype bepaalt welke acties kunnen worden uitgevoerd.

In het volgende voorbeeld worden XML-gegevens gelezen en verschillende tekst weggeschreven, afhankelijk van het knooppunttype. Gebruik het volgende XML-gegevensbestand als invoer, items.xml:

Invoer

<?xml version="1.0"?>  
<!-- This is a sample XML document -->  
<!DOCTYPE Items [<!ENTITY number "123">]>  
<Items>  
  <Item>Test with an entity: &number;</Item>  
  <Item>test with a child element <more/> stuff</Item>  
  <Item>test with a CDATA section <![CDATA[<456>]]> def</Item>  
  <Item>Test with a char entity: A</Item>  
  <!-- Fourteen chars in this element.-->  
  <Item>1234567890ABCD</Item>  
</Items>  

In het volgende codevoorbeeld wordt het items.xml-bestand gelezen en wordt informatie weergegeven voor elk knooppunttype.

Imports System  
Imports System.IO  
Imports System.Xml  
  
Public Class Sample  
    Private Const filename As String = "items.xml"  
  
    Public Shared Sub Main()  
  
        Dim reader As XmlTextReader = Nothing  
  
        Try  
            ' Load the reader with the data file and
            'ignore all white space nodes.
            reader = New XmlTextReader(filename)  
            reader.WhitespaceHandling = WhitespaceHandling.None  
  
            ' Parse the file and display each of the nodes.  
            While reader.Read()  
                Select Case reader.NodeType  
                    Case XmlNodeType.Element  
                        Console.Write("<{0}>", reader.Name)  
                    Case XmlNodeType.Text  
                        Console.Write(reader.Value)  
                    Case XmlNodeType.CDATA  
                        Console.Write("<![CDATA[{0}]]>", reader.Value)  
                    Case XmlNodeType.ProcessingInstruction  
                        Console.Write("<?{0} {1}?>", reader.Name, reader.Value)  
                    Case XmlNodeType.Comment  
                        Console.Write("<!--{0}-->", reader.Value)  
                    Case XmlNodeType.XmlDeclaration  
                        Console.Write("<?xml version='1.0'?>")  
                    Case XmlNodeType.Document  
                    Case XmlNodeType.DocumentType  
                        Console.Write("<!DOCTYPE {0} [{1}]", reader.Name, reader.Value)  
                    Case XmlNodeType.EntityReference  
                        Console.Write(reader.Name)  
                    Case XmlNodeType.EndElement  
                        Console.Write("</{0}>", reader.Name)  
                End Select  
            End While  
  
        Finally  
            If Not (reader Is Nothing) Then  
                reader.Close()  
            End If  
        End Try  
    End Sub 'Main ' End class  
End Class 'Sample  
using System;  
using System.IO;  
using System.Xml;  
  
public class Sample  
{  
    private const String filename = "items.xml";  
  
    public static void Main()  
    {  
        XmlTextReader reader = null;  
  
        try  
        {  
            // Load the reader with the data file and ignore
            // all white space nodes.  
            reader = new XmlTextReader(filename);  
            reader.WhitespaceHandling = WhitespaceHandling.None;  
  
            // Parse the file and display each of the nodes.  
            while (reader.Read())  
            {  
                switch (reader.NodeType)  
                {  
                    case XmlNodeType.Element:  
                        Console.Write("<{0}>", reader.Name);  
                        break;  
                    case XmlNodeType.Text:  
                        Console.Write(reader.Value);  
                        break;  
                    case XmlNodeType.CDATA:  
                        Console.Write("<![CDATA[{0}]]>", reader.Value);  
                        break;  
                    case XmlNodeType.ProcessingInstruction:  
                        Console.Write("<?{0} {1}?>", reader.Name, reader.Value);  
                        break;  
                    case XmlNodeType.Comment:  
                        Console.Write("<!--{0}-->", reader.Value);  
                        break;  
                    case XmlNodeType.XmlDeclaration:  
                        Console.Write("<?xml version='1.0'?>");  
                        break;  
                    case XmlNodeType.Document:  
                        break;  
                    case XmlNodeType.DocumentType:  
                        Console.Write("<!DOCTYPE {0} [{1}]", reader.Name, reader.Value);  
                        break;  
                    case XmlNodeType.EntityReference:  
                        Console.Write(reader.Name);  
                        break;  
                    case XmlNodeType.EndElement:  
                        Console.Write("</{0}>", reader.Name);  
                        break;  
                }  
            }  
        }  
  
        finally  
        {  
            if (reader != null)  
                reader.Close();  
        }  
    }  
} // End class  

De uitvoer uit het voorbeeld toont de toewijzing van de gegevens aan de knooppunttypen.

Uitvoer

<?xml version='1.0'?><!--This is a sample XML document --><!DOCTYPE Items [<!ENTITY number "123">]<Items><Item>Test with an entity: 123</Item><Item>test with a child element <more> stuff</Item><Item>test with a CDATA section <![CDATA[<456>]]> def</Item><Item>Test with a char entity: A</Item><--Fourteen chars in this element.--><Item>1234567890ABCD</Item></Items>

Als u de invoer één regel tegelijk gebruikt en de uitvoer gebruikt die is gegenereerd op basis van de code, kunt u de volgende tabel gebruiken om te analyseren welke knooppunttest heeft gegenereerd welke regels uitvoer hebben gegenereerd, zodat u begrijpt welke XML-gegevens zijn geworden wat voor soort knooppunttype is geworden.

Invoer Uitvoer Knooppunttypetest
<?xml version="1.0"?> <?xml version='1.0'?> XmlNodeType.XmlDeclaration
<-- Dit is een XML-voorbeelddocument -> <--Dit is een XML-voorbeelddocument --> XmlNodeType.Comment
<! DOCTYPE-items [<! ENTITEITsnummer "123">]> <! DOCTYPE-items [<! ENTITEITsnummer "123">] XmlNodeType.DocumentType
<Artikelen> <Artikelen> XmlNodeType.Element
<Artikel> <Artikel> XmlNodeType.Element
Testen met een entiteit: & Testen met een entiteit: 123 XmlNodeType.Text
</Item> </Item> XmlNodeType.EndElement
<Artikel> <Artikel> XmNodeType.Element
testen met een onderliggend element testen met een onderliggend element XmlNodeType.Text
<Meer> <Meer> XmlNodeType.Element
stuff stuff XmlNodeType.Text
</Item> </Item> XmlNodeType.EndElement
<Artikel> <Artikel> XmlNodeType.Element
testen met een CDATA-sectie testen met een CDATA-sectie XmlTest.Text
<! [CDATA[<456>]]> <! [CDATA[<456>]]> XmlTest.CDATA
def def XmlNodeType.Text
</Item> </Item> XmlNodeType.EndElement
<Artikel> <Artikel> XmlNodeType.Element
Testen met een tekenentiteit: A Testen met een tekenentiteit: A XmlNodeType.Text
</Item> </Item> XmlNodeType.EndElement
<-- Veertien tekens in dit element.--> <--Veertien tekens in dit element.--> XmlNodeType.Comment
<Artikel> <Artikel> XmlNodeType.Element
1234567890ABCD 1234567890ABCD XmlNodeType.Text
</Item> </Item> XmlNodeType.EndElement
</Items> </Items> XmlNodeType.EndElement

U moet weten welk knooppunttype is toegewezen, omdat het knooppunttype bepaalt welke soorten acties geldig zijn en welk type eigenschappen u kunt instellen en ophalen.

Het maken van knooppunten voor witruimte wordt bepaald wanneer de gegevens in de DOM worden geladen door de vlag PreserveWhitespace . Zie Witruimte en Significante witruimteafhandeling bij het laden van de DOM voor meer informatie.

Zie Knooppunten invoegen in een XML-document om nieuwe knooppunten toe te voegen aan de DOM. Als u knooppunten uit de DOM wilt verwijderen, raadpleegt u Knooppunten, inhoud en waarden verwijderen uit een XML-document. Zie Knooppunten, inhoud en waarden wijzigen in een XML-document om de inhoud van knooppunten in de DOM te wijzigen.

Zie ook