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.
sınıfını XmlDocument kullanarak, bir XmlDocument nesnede bulunan XML içeriğini iki şekilde doğrulayabilirsiniz. İlk yol, doğrulayıcı XmlReader nesne kullanarak XML içeriğini doğrulamak, ikinci yol ise Validate sınıfının XmlDocument yöntemini kullanmaktır. Bu sınıfı kullanarak XML içeriğinin salt okunur doğrulamasını da gerçekleştirebilirsiniz.
XML Verilerini Doğrulama
sınıfı, XmlDocument varsayılan olarak DTD veya XML şema tanım dili (XSD) şema doğrulamasını kullanarak xml belgesini doğrulamaz. Yalnızca XML belgesinin iyi biçimlendirilmiş olduğunu doğrular.
XML belgesini doğrulamanın ilk yolu, belgeyi doğrulama XmlDocument nesnesi kullanılarak bir XmlReader nesneye yüklenirken doğrulamaktır. İkinci yol, Validate sınıfının XmlDocument yöntemini kullanarak önceden yazılmamış bir XML belgesini doğrulamaktır. Her iki durumda da, doğrulanmış XML belgesindeki değişiklikler Validate sınıfının XmlDocument yöntemi kullanılarak yeniden doğrulanabilir.
Belge yüklendikçe doğrulanıyor
XmlReader doğrulama nesnesi, bir XmlReaderSettings nesneyi parametre olarak alan Create sınıfının XmlReader yöntemine XmlReaderSettings geçirilerek oluşturulur. Parametre olarak geçirilen XmlReaderSettings nesnesinin ValidationType özelliği olarak ayarlanmış bir Schema değeri var ve XML belgesi için XML Şeması, XmlDocument özelliğine eklenen Schemas nesnesinde bulunuyor. Daha sonra nesneyi oluşturmak XmlReader için doğrulayıcı XmlDocument nesne kullanılır.
Aşağıdaki örnek, doğrulayan bir contosoBooks.xml nesnesi kullanarak XmlDocument nesnesini oluşturarak, XmlDocument dosyasını XmlReader nesnesine yüklenirken doğrular. XML belgesi şemasına göre geçerli olduğundan, şema doğrulama hataları veya uyarıları oluşturulmaz.
Imports System
Imports System.Xml
Imports System.Xml.Schema
Imports System.Xml.XPath
Class ValidatingReaderExample
Shared Sub Main(ByVal args() As String)
Try
Dim settings As XmlReaderSettings = New XmlReaderSettings()
settings.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd")
settings.ValidationType = ValidationType.Schema
Dim reader As XmlReader = XmlReader.Create("contosoBooks.xml", settings)
Dim document As XmlDocument = New XmlDocument()
document.Load(reader)
Dim navigator As XPathNavigator = document.CreateNavigator()
Catch e As Exception
Console.WriteLine("ValidatingReaderExample.Exception: {0}", e.Message)
End Try
End Sub
Shared Sub SchemaValidationHandler(ByVal sender As Object, ByVal e As ValidationEventArgs)
Select Case e.Severity
Case XmlSeverityType.Error
Console.WriteLine("Schema Validation Error: {0}", e.Message)
Exit Sub
Case XmlSeverityType.Warning
Console.WriteLine("Schema Validation Warning: {0}", e.Message)
Exit Sub
End Select
End Sub
End Class
using System;
using System.Xml;
using System.Xml.Schema;
using System.Xml.XPath;
class ValidatingReaderExample
{
static void Main(string[] args)
{
try
{
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd");
settings.ValidationType = ValidationType.Schema;
XmlReader reader = XmlReader.Create("contosoBooks.xml", settings);
XmlDocument document = new XmlDocument();
document.Load(reader);
XPathNavigator navigator = document.CreateNavigator();
}
catch (Exception e)
{
Console.WriteLine("ValidatingReaderExample.Exception: {0}", e.Message);
}
}
static void SchemaValidationHandler(object sender, ValidationEventArgs e)
{
switch (e.Severity)
{
case XmlSeverityType.Error:
Console.WriteLine("Schema Validation Error: {0}", e.Message);
break;
case XmlSeverityType.Warning:
Console.WriteLine("Schema Validation Warning: {0}", e.Message);
break;
}
}
}
Örnek, contosoBooks.xml dosyasını giriş olarak alır.
<?xml version="1.0" encoding="utf-8" ?>
<bookstore xmlns="http://www.contoso.com/books">
<book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
<title>The Autobiography of Benjamin Franklin</title>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</book>
<book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<name>Plato</name>
</author>
<price>9.99</price>
</book>
</bookstore>
Örnek, contosoBooks.xsd öğesini de giriş olarak alır.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.contoso.com/books" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="bookstore">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="book">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string" />
<xs:element name="author">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="name" type="xs:string" />
<xs:element minOccurs="0" name="first-name" type="xs:string" />
<xs:element minOccurs="0" name="last-name" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="price" type="xs:decimal" />
</xs:sequence>
<xs:attribute name="genre" type="xs:string" use="required" />
<xs:attribute name="publicationdate" type="xs:date" use="required" />
<xs:attribute name="ISBN" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Yukarıdaki örnekte, herhangi bir öznitelik veya öğe türü, doğrulama şemasında belirtilen karşılık gelen türle eşleşmezse, XmlSchemaValidationException çağrıldığında bir Load fırlatılır. Doğrulayan ValidationEventHandler üzerine bir XmlReader ayarlanırsa, geçersiz bir türle karşılaşıldığında, ValidationEventHandler çağrılır.
XmlSchemaException olarak ayarlanmış bir özniteliğe veya öğeye TypedValue değeri verildiğinde invalid tarafından erişildiğinde bir hata oluşturulur.
Validity özelliği ile XPathNavigatorözniteliklere veya öğelere erişirken tek bir özniteliğin veya öğenin geçerli olup olmadığını belirlemek için kullanılabilir.
Uyarı
Xml belgesi, varsayılan değerleri tanımlayan ilişkili şemaya sahip bir XmlDocument nesneye yüklendiğinde, XmlDocument nesne bu varsayılan değerleri XML belgesinde göründükleri gibi değerlendirir. Bu, bir öğe XML belgesinde boş olarak yazılmış olsa bile, şemadan varsayılan alınmış bir öğe için IsEmptyElement özelliğinin her zaman false döndüreceği anlamına gelir.
Validate Yöntemini Kullanarak Belgeyi Doğrulama
Validate sınıfının XmlDocument yöntemi, XmlDocumentXmlDocument nesnesinin özelliğinde belirtilen şemalara uygun olarak bir Schemas nesnesinde bulunan XML belgesini doğrular ve bilgi seti genişletme işlemi gerçekleştirir. Sonuç, nesnede XmlDocument daha önce yazılmamış bir XML belgesidir ve bu belge, yazılan bir belgeyle değiştirilir.
XmlDocument nesnesi, şema doğrulama hatalarını ve uyarılarını ValidationEventHandler yöntemine parametre olarak geçirilen Validate temsilciyi kullanarak bildirir.
Aşağıdaki örnek, contosoBooks.xml nesnesinde bulunan XmlDocument dosyasını, contosoBooks.xsd nesnesinin XmlDocument özelliğinde bulunan Schemas şemasına karşı doğrular.
Imports System
Imports System.Xml
Imports System.Xml.Schema
Imports System.Xml.XPath
Class ValidateExample
Shared Sub Main(ByVal args() As String)
Dim document As XmlDocument = New XmlDocument()
document.Load("contosoBooks.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()
document.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd")
Dim validation As ValidationEventHandler = New ValidationEventHandler(AddressOf SchemaValidationHandler)
document.Validate(validation)
End Sub
Shared Sub SchemaValidationHandler(ByVal sender As Object, ByVal e As ValidationEventArgs)
Select Case e.Severity
Case XmlSeverityType.Error
Console.WriteLine("Schema Validation Error: {0}", e.Message)
Exit Sub
Case XmlSeverityType.Warning
Console.WriteLine("Schema Validation Warning: {0}", e.Message)
Exit Sub
End Select
End Sub
End Class
using System;
using System.Xml;
using System.Xml.Schema;
using System.Xml.XPath;
class ValidateExample
{
static void Main(string[] args)
{
XmlDocument document = new XmlDocument();
document.Load("contosoBooks.xml");
XPathNavigator navigator = document.CreateNavigator();
document.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd");
ValidationEventHandler validation = new ValidationEventHandler(SchemaValidationHandler);
document.Validate(validation);
}
static void SchemaValidationHandler(object sender, ValidationEventArgs e)
{
switch (e.Severity)
{
case XmlSeverityType.Error:
Console.WriteLine("Schema Validation Error: {0}", e.Message);
break;
case XmlSeverityType.Warning:
Console.WriteLine("Schema Validation Warning: {0}", e.Message);
break;
}
}
}
Örnek, contosoBooks.xml dosyasını giriş olarak alır.
<?xml version="1.0" encoding="utf-8" ?>
<bookstore xmlns="http://www.contoso.com/books">
<book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
<title>The Autobiography of Benjamin Franklin</title>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</book>
<book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<name>Plato</name>
</author>
<price>9.99</price>
</book>
</bookstore>
Örnek, contosoBooks.xsd öğesini de giriş olarak alır.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.contoso.com/books" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="bookstore">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="book">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string" />
<xs:element name="author">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="name" type="xs:string" />
<xs:element minOccurs="0" name="first-name" type="xs:string" />
<xs:element minOccurs="0" name="last-name" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="price" type="xs:decimal" />
</xs:sequence>
<xs:attribute name="genre" type="xs:string" use="required" />
<xs:attribute name="publicationdate" type="xs:date" use="required" />
<xs:attribute name="ISBN" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Değişiklikleri Doğrulama
Xml belgesinde değişiklikler yapıldıktan sonra, xml belgesinin şemasında yapılan değişiklikleri sınıfın Validate yöntemini kullanarak XmlDocument doğrulayabilirsiniz.
Aşağıdaki örnek, doğrulayan bir contosoBooks.xml nesnesi kullanarak XmlDocument nesnesini oluşturarak, XmlDocument dosyasını XmlReader nesnesine yüklenirken doğrular. XML belgesi, şema doğrulama hataları veya uyarıları oluşturmadan yüklendiğinden başarıyla doğrulanır. Örnek daha sonra XML belgesinde şemaya contosoBooks.xsd göre geçersiz olan iki değişiklik yapar. İlk değişiklik geçersiz bir alt öğe ekler ve şema doğrulama hatasıyla sonuçlanır ve ikinci değişiklik türü belirtilen düğümün değerini bir özel durumla sonuçlanan düğümün türüne göre geçersiz bir değere ayarlar.
Imports System
Imports System.Xml
Imports System.Xml.Schema
Imports System.Xml.XPath
Class ValidatingReaderExample
Shared Sub Main(ByVal args() As String)
Try
Dim settings As XmlReaderSettings = New XmlReaderSettings()
settings.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd")
settings.ValidationType = ValidationType.Schema
Dim reader As XmlReader = XmlReader.Create("contosoBooks.xml", settings)
Dim document As XmlDocument = New XmlDocument()
document.Load(reader)
Dim navigator As XPathNavigator = document.CreateNavigator()
Dim validation As ValidationEventHandler = New ValidationEventHandler(AddressOf SchemaValidationHandler)
navigator.MoveToChild("bookstore", "http://www.contoso.com/books")
navigator.MoveToChild("book", "http://www.contoso.com/books")
navigator.MoveToChild("author", "http://www.contoso.com/books")
navigator.AppendChild("<title>Book Title</title>")
document.Validate(validation)
navigator.MoveToParent()
navigator.MoveToChild("price", "http://www.contoso.com/books")
navigator.SetTypedValue(DateTime.Now)
Catch e As Exception
Console.WriteLine("ValidatingReaderExample.Exception: {0}", e.Message)
End Try
End Sub
Shared Sub SchemaValidationHandler(ByVal sender As Object, ByVal e As ValidationEventArgs)
Select Case e.Severity
Case XmlSeverityType.Error
Console.WriteLine("Schema Validation Error: {0}", e.Message)
Exit Sub
Case XmlSeverityType.Warning
Console.WriteLine("Schema Validation Warning: {0}", e.Message)
Exit Sub
End Select
End Sub
End Class
using System;
using System.Xml;
using System.Xml.Schema;
using System.Xml.XPath;
class ValidatingReaderExample
{
static void Main(string[] args)
{
try
{
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd");
settings.ValidationType = ValidationType.Schema;
XmlReader reader = XmlReader.Create("contosoBooks.xml", settings);
XmlDocument document = new XmlDocument();
document.Load(reader);
XPathNavigator navigator = document.CreateNavigator();
ValidationEventHandler validation = new ValidationEventHandler(SchemaValidationHandler);
navigator.MoveToChild("bookstore", "http://www.contoso.com/books");
navigator.MoveToChild("book", "http://www.contoso.com/books");
navigator.MoveToChild("author", "http://www.contoso.com/books");
navigator.AppendChild("<title>Book Title</title>");
document.Validate(validation);
navigator.MoveToParent();
navigator.MoveToChild("price", "http://www.contoso.com/books");
navigator.SetTypedValue(DateTime.Now);
}
catch (Exception e)
{
Console.WriteLine("ValidatingReaderExample.Exception: {0}", e.Message);
}
}
static void SchemaValidationHandler(object sender, ValidationEventArgs e)
{
switch (e.Severity)
{
case XmlSeverityType.Error:
Console.WriteLine("Schema Validation Error: {0}", e.Message);
break;
case XmlSeverityType.Warning:
Console.WriteLine("Schema Validation Warning: {0}", e.Message);
break;
}
}
}
Örnek, contosoBooks.xml dosyasını giriş olarak alır.
<?xml version="1.0" encoding="utf-8" ?>
<bookstore xmlns="http://www.contoso.com/books">
<book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
<title>The Autobiography of Benjamin Franklin</title>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</book>
<book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<name>Plato</name>
</author>
<price>9.99</price>
</book>
</bookstore>
Örnek, contosoBooks.xsd öğesini de giriş olarak alır.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.contoso.com/books" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="bookstore">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="book">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string" />
<xs:element name="author">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="name" type="xs:string" />
<xs:element minOccurs="0" name="first-name" type="xs:string" />
<xs:element minOccurs="0" name="last-name" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="price" type="xs:decimal" />
</xs:sequence>
<xs:attribute name="genre" type="xs:string" use="required" />
<xs:attribute name="publicationdate" type="xs:date" use="required" />
<xs:attribute name="ISBN" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Yukarıdaki örnekte, XmlDocument nesnesi içinde bulunan XML belgesinde iki değişiklik yapılmıştır. XML belgesi yüklenirken, karşılaşılan tüm şema doğrulama hataları doğrulama olay işleyici yöntemi tarafından işlenip konsola yazılmış olabilir.
Bu örnekte, XML belgesi yüklendikten sonra doğrulama hataları ortaya çıkmış ve bu hatalar Validate sınıfının XmlDocument yöntemi kullanılarak bulunmuştur.
SetTypedValue yöntemini kullanarak XPathNavigator sınıfının yapılan değişiklikleri, yeni değerin düğümün şema türüne göre geçersiz olması nedeniyle bir InvalidCastException ile sonuçlandı.
yöntemini kullanarak SetTypedValue değerleri değiştirme hakkında daha fazla bilgi için XPathNavigator kullanarak XML Verilerini Değiştirme konusuna bakın.
Read-Only Doğrulama
XPathDocument sınıfı, xml belgesinin salt okunur, bellek içi bir gösterimidir. Hem XPathDocument sınıfı hem de XmlDocument sınıfı, XML belgelerinde gezinmek ve belgeleri düzenlemek için XPathNavigator nesneleri oluşturur. XPathDocument sınıfı salt okunur bir sınıf olduğundan, XPathNavigator nesneleri XPathDocument nesnelerinden döndürüldüğü için, XPathDocument nesnesindeki XML belgesini düzenleyemez.
Doğrulama durumunda, bu konunun önceki kısımlarında açıklandığı gibi, bir doğrulayıcı XPathDocument nesne kullanarak XmlDocument nesnesi oluşturduğunuz gibi bir XmlReader nesnesi oluşturabilirsiniz. XPathDocument Nesne, XML belgesini yüklendikçe doğrular, ancak nesnedeki XPathDocument XML verilerini düzenleyemediğiniz için XML belgesini yeniden doğrulayamazsınız.
Salt okunur ve düzenlenebilir XPathNavigator nesneler hakkında daha fazla bilgi için XPathDocument ve XmlDocument kullanarak XML Verilerini Okuma konusuna bakın.
Ayrıca bakınız
- XmlDocument
- XPathDocument
- XPathNavigator
- XPath Veri Modelini Kullanarak XML Verilerini İşleme
- XPathDocument ve XmlDocument Kullanarak XML Verilerini Okuma
- XPathNavigator kullanarak XML Verilerini Seçme, Değerlendirme ve Eşleştirme
- XPathNavigator kullanarak XML Verilerine Erişme
- XPathNavigator kullanarak XML Verilerini Düzenleme