Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Microsoft .NET Framework, XML Belge Nesne Modeli'nin (DOM) bir uygulamasını sağlayan temel bir sınıf kümesi içerir. XmlNodeve türetilmiş sınıfları, XML belgesinin içeriğinde ve yapısında gezinmenize, sorgulamanıza ve bunları değiştirmenize olanak sağlayan yöntemler ve özellikler sağlar.
XML içeriği DOM kullanılarak belleğe yüklendiğinde, oluşturulan düğümler düğüm adı, düğüm türü vb. bilgileri içerir. Temel sınıfların sağlamadığı belirli düğüm bilgilerine ihtiyaç duymanız gereken durumlar olabilir. Örneğin, düğümün satır numarasını ve konumunu görmek isteyebilirsiniz. Bu durumda, mevcut DOM sınıflarından yeni sınıflar türetebilir ve ek işlevler ekleyebilirsiniz.
Yeni sınıflar türetilirken iki genel yönerge vardır:
XmlNode sınıfından asla türetilmemeniz önerilir. Bunun yerine, ilgilendiğiniz düğüm türüne karşılık gelen sınıftan sınıf türetmek önerilir. Örneğin, öznitelik düğümleri hakkında ek bilgi döndürmek istiyorsanız sınıfından XmlAttribute türetebilirsiniz.
Düğüm oluşturma yöntemleri dışında, bir işlevi geçersiz kıldığınızda her zaman işlevin temel sürümünü çağırmanız ve ardından ek işlemler eklemeniz önerilir.
Kendi Düğüm Örneklerinizi Oluşturma
XmlDocument sınıfı düğüm oluşturma yöntemlerini içerir. Bir XML dosyası yüklendiğinde, düğümleri oluşturmak için bu yöntemler çağrılır. Bir belge yüklendiğinde düğüm örneklerinizin oluşturulması için bu yöntemleri geçersiz kılabilirsiniz. Örneğin, XmlElement sınıfını genişlettiyseniz, belirli bir XmlDocument sınıfını devralır ve CreateElement yöntemini geçersiz kılarsınız.
Aşağıdaki örnek, CreateElement yöntemini, XmlElement sınıfını uygulamanızı döndürmek üzere nasıl geçersiz kılacağınızı göstermektedir.
Class LineInfoDocument
Inherits XmlDocument
Public Overrides Function CreateElement(prefix As String, localname As String, nsURI As String) As XmlElement
Dim elem As New LineInfoElement(prefix, localname, nsURI, Me)
Return elem
End Function 'CreateElement
End Class 'LineInfoDocument
class LineInfoDocument : XmlDocument
{
public override XmlElement CreateElement(string prefix, string localname, string nsURI)
{
LineInfoElement elem = new LineInfoElement(prefix, localname, nsURI, this);
return elem;
}
}
Sınıfı Genişletme
Bir sınıfı genişletmek için sınıfınızı mevcut DOM sınıflarından birinden türetin. Daha sonra temel sınıftaki sanal yöntemlerden veya özelliklerden herhangi birini geçersiz kılabilir veya kendi sanal yöntemlerinizi ekleyebilirsiniz.
Aşağıdaki örnekte, XmlElement sınıfını ve IXmlLineInfo arabirimini uygulayan yeni bir sınıf oluşturulur. Kullanıcıların satır bilgilerini toplamasına olanak tanıyan ek yöntemler ve özellikler tanımlanır.
Class LineInfoElement
Inherits XmlElement
Implements IXmlLineInfo
Private lineNumber As Integer = 0
Private linePosition As Integer = 0
Friend Sub New(prefix As String, localname As String, nsURI As String, doc As XmlDocument)
MyBase.New(prefix, localname, nsURI, doc)
CType(doc, LineInfoDocument).IncrementElementCount()
End Sub
Public Sub SetLineInfo(linenum As Integer, linepos As Integer)
lineNumber = linenum
linePosition = linepos
End Sub
Public ReadOnly Property LineNumber() As Integer
Get
Return lineNumber
End Get
End Property
Public ReadOnly Property LinePosition() As Integer
Get
Return linePosition
End Get
End Property
Public Function HasLineInfo() As Boolean
Return True
End Function
End Class ' End LineInfoElement class.
class LineInfoElement : XmlElement, IXmlLineInfo {
int lineNumber = 0;
int linePosition = 0;
internal LineInfoElement( string prefix, string localname, string nsURI, XmlDocument doc ) : base( prefix, localname, nsURI, doc ) {
( (LineInfoDocument)doc ).IncrementElementCount();
}
public void SetLineInfo( int linenum, int linepos ) {
lineNumber = linenum;
linePosition = linepos;
}
public int LineNumber {
get {
return lineNumber;
}
}
public int LinePosition {
get {
return linePosition;
}
}
public bool HasLineInfo() {
return true;
}
} // End LineInfoElement class.
Örnek
Aşağıdaki örnek bir XML belgesindeki öğe sayısını sayar:
Imports System.Xml
Imports System.IO
Class LineInfoDocument
Inherits XmlDocument
Private elementCount As Integer
Friend Sub New()
elementCount = 0
End Sub
Public Overrides Function CreateElement(prefix As String, localname As String, nsURI As String) As XmlElement
Dim elem As New LineInfoElement(prefix, localname, nsURI, Me)
Return elem
End Function
Public Sub IncrementElementCount()
elementCount += 1
End Sub
Public Function GetCount() As Integer
Return elementCount
End Function
End Class 'End LineInfoDocument class.
Class LineInfoElement
Inherits XmlElement
Friend Sub New(prefix As String, localname As String, nsURI As String, doc As XmlDocument)
MyBase.New(prefix, localname, nsURI, doc)
CType(doc, LineInfoDocument).IncrementElementCount()
End Sub 'New
End Class 'LineInfoElement
_ 'End LineInfoElement class.
Public Class Test
Private filename As [String] = "book.xml"
Public Shared Sub Main()
Dim doc As New LineInfoDocument()
doc.Load(filename)
Console.WriteLine("Number of elements in {0}: {1}", filename, doc.GetCount())
End Sub
End Class
using System;
using System.Xml;
using System.IO;
class LineInfoDocument : XmlDocument {
int elementCount;
internal LineInfoDocument():base() {
elementCount = 0;
}
public override XmlElement CreateElement( string prefix, string localname, string nsURI) {
LineInfoElement elem = new LineInfoElement(prefix, localname, nsURI, this );
return elem;
}
public void IncrementElementCount() {
elementCount++;
}
public int GetCount() {
return elementCount;
}
} // End LineInfoDocument class.
class LineInfoElement:XmlElement {
internal LineInfoElement( string prefix, string localname, string nsURI, XmlDocument doc ):base( prefix,localname,nsURI, doc ){
((LineInfoDocument)doc).IncrementElementCount();
}
} // End LineInfoElement class.
public class Test {
const String filename = "book.xml";
public static void Main() {
LineInfoDocument doc =new LineInfoDocument();
doc.Load(filename);
Console.WriteLine("Number of elements in {0}: {1}", filename, doc.GetCount());
}
}
Veri Girişi
book.xml
<!--sample XML fragment-->
<book genre='novel' ISBN='1-861001-57-5' misc='sale-item'>
<title>The Handmaid's Tale</title>
<price>14.95</price>
</book>
Çıktı
Number of elements in book.xml: 3
Düğüm Olay İşleyicisi
DOM'un .NET Framework uygulaması, bir XML belgesindeki düğümler değiştiğinde olayları almanıza ve işlemenize olanak tanıyan bir olay sistemi de içerir. Kullanarak XmlNodeChangedEventHandler ve XmlNodeChangedEventArgs sınıflarını, NodeChanged, NodeChanging, NodeInserted, NodeInserting, NodeRemoved ve NodeRemoving olaylarını yakalayabilirsiniz.
Olay işleme işlemi, türetilmiş sınıflarda özgün DOM sınıflarında olduğu gibi tam olarak aynı şekilde çalışır.
Düğüm olay işleme hakkında daha fazla bilgi için bkz Olaylar ve XmlNodeChangedEventHandler.
Varsayılan Öznitelikler ve CreateElement Yöntemi
Türetilen bir sınıfta CreateElement yöntemini geçersiz kılıyorsanız, belgeyi düzenlediğinizde yeni öğeler oluşturduğunuzda varsayılan öznitelikler eklenmez. Bu yalnızca düzenleme sırasında bir sorundur. CreateElement yöntemi varsayılan öznitelikleri bir XmlDocument eklemekten sorumlu olduğundan, bu işlevi CreateElement yönteminde kodlamalısınız. Varsayılan öznitelikleri içeren bir XmlDocument yüklüyorsanız, bunlar doğru şekilde işlenir. Varsayılan öznitelikler hakkında daha fazla bilgi için bkz. DOM'da Öğeler için Yeni Öznitelikler Oluşturma.