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:
Kitap ve başlık düğümü ağaç gösterimi
book
öğesi bir XmlElement nesnesi olur, sonraki öğesi title
olan , 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.