Share via


XML Verilerine Nesne Hiyerarşisi Eşleme

XML belgesi bellekte olduğunda, kavramsal gösterim bir ağaçtır. Programlama için, ağacın düğümlerine erişmek için bir nesne hiyerarşiniz vardır. Aşağıdaki örnekte XML içeriğinin düğümlere nasıl dönüştüğü gösterilmektedir.

XML, XML Belge Nesne Modeli'ne (DOM) okundukça, parçalar düğümlere çevrilir ve bu düğümler kendileriyle ilgili düğüm türleri ve değerleri gibi ek meta verileri korur. Düğüm türü kendi nesnesidir ve hangi eylemlerin gerçekleştirilebileceğini ve hangi özelliklerin ayarlanıp alınabileceğini belirleyen öğedir.

Aşağıdaki basit XML'niz varsa:

Girdi

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

Giriş, bellekte atanan düğüm türü özelliğiyle aşağıdaki düğüm ağacı olarak gösterilir:

example node tree
Kitap ve başlık düğümü ağaç gösterimi

book öğesi bir XmlElement nesnesi olur, sonraki öğesi titleolan , aynı zamanda bir XmlElement olurken, öğe içeriği bir XmlText nesnesine dönüşür. XmlElement yöntemlerine ve özelliklerine bakıldığında, yöntemler ve özellikler bir XmlText nesnesinde kullanılabilen yöntem ve özelliklerden farklıdır. Dolayısıyla, XML işaretlemesinin hangi düğüm türüne dönüştüğü bilinmesi, düğüm türü gerçekleştirilebilecek eylemleri belirlediği için çok önemlidir.

Aşağıdaki örnek, XML verilerinde okur ve düğüm türüne bağlı olarak farklı metinler yazar. Giriş olarak aşağıdaki XML veri dosyasını kullanarak items.xml:

Girdi

<?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>  

Aşağıdaki kod örneği items.xml dosyasını okur ve her düğüm türüne ilişkin bilgileri görüntüler.

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  

Örnekten alınan çıktı, düğüm türlerine veri eşlemesini gösterir.

Çıktı

<?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>

Girişi bir kerede bir satır alarak ve koddan oluşturulan çıkışı kullanarak, hangi düğüm testinin hangi çıkış satırlarını ürettiğini analiz etmek için aşağıdaki tabloyu kullanabilir ve böylece hangi XML verilerinin ne tür bir düğüm türüne dönüştüdüğünü anlayabilirsiniz.

Girdi Çıktı Düğüm Türü Testi
<?xml version="1.0"?> <?xml version='1.0'?> XmlNodeType.XmlDeclaration
<-- Bu örnek bir XML belgesidir --> <--Bu örnek bir XML belgesidir --> XmlNodeType.Comment
<! DOCTYPE Öğeleri [<! VARLıK numarası "123">]> <! DOCTYPE Öğeleri [<! VARLıK numarası "123">] XmlNodeType.DocumentType
<Öğeler> <Öğeler> XmlNodeType.Element
<Kalem> <Kalem> XmlNodeType.Element
Bir varlıkla test et: & Bir varlıkla test: 123 XmlNodeType.Text
</Öğe> </Öğe> XmlNodeType.EndElement
<Kalem> <Kalem> XmNodeType.Element
alt öğeyle test et alt öğeyle test et XmlNodeType.Text
<diğer…> <diğer…> XmlNodeType.Element
öğeler öğeler XmlNodeType.Text
</Öğe> </Öğe> XmlNodeType.EndElement
<Kalem> <Kalem> XmlNodeType.Element
CDATA bölümüyle test edin CDATA bölümüyle test edin XmlTest.Text
<! [CDATA[<456>]]> <! [CDATA[<456>]]> XmlTest.CDATA
def def XmlNodeType.Text
</Öğe> </Öğe> XmlNodeType.EndElement
<Kalem> <Kalem> XmlNodeType.Element
Karakter varlığıyla test etme: A Karakter varlığıyla test et: A XmlNodeType.Text
</Öğe> </Öğe> XmlNodeType.EndElement
<-- bu öğede on dört karakter.--> <--Bu öğedeki on dört karakter.--> XmlNodeType.Comment
<Kalem> <Kalem> XmlNodeType.Element
1234567890ABCD 1234567890ABCD XmlNodeType.Text
</Öğe> </Öğe> XmlNodeType.EndElement
</Bileşen> </Bileşen> XmlNodeType.EndElement

Düğüm türü ne tür eylemlerin geçerli olduğunu ve ne tür özellikleri ayarlayıp alabileceğinizi denetlediği için, hangi düğüm türünün atandığı bilmeniz gerekir.

Boşluk için düğüm oluşturma, veriler PreserveWhitespace bayrağıyla DOM'a yüklendiğinde denetlenilir. Daha fazla bilgi için bkz . DOM Yüklenirken Boşluk ve Önemli Boşluk İşleme.

DOM'a yeni düğümler eklemek için bkz . XML Belgesine Düğüm Ekleme. DOM'dan düğümleri kaldırmak için bkz . XML Belgesinden Düğümleri, İçeriği ve Değerleri Kaldırma. DOM'daki düğümlerin içeriğini değiştirmek için bkz . XML Belgesindeki Düğümleri, İçeriği ve Değerleri Değiştirme.

Ayrıca bkz.