XmlSchemaValidator sınıfı, XML verilerini XML şemalarına karşı gönderme tabanlı bir şekilde doğrulamak için verimli, yüksek performanslı bir mekanizma sağlar. Örneğin, sınıfı XML XmlSchemaValidator bilgi kümesini XML belgesi olarak seri hale getirmek zorunda kalmadan yerinde doğrulamanıza ve ardından belgeyi doğrulayan bir XML okuyucu kullanarak yeniden ayrıştırmanıza olanak tanır.
sınıfı, XmlSchemaValidator özel XML veri kaynakları üzerinden doğrulama altyapıları oluşturma gibi gelişmiş senaryolarda veya doğrulayıcı xml yazıcı oluşturmanın bir yolu olarak kullanılabilir.
Aşağıda, dosyasını şemaya XmlSchemaValidator göre doğrulamak için sınıfını contosoBooks.xml kullanma örneği verilmiştir contosoBooks.xsd . Örnek, dosyasını seri durumdan contosoBooks.xml çıkarmak ve düğümlerin değerini sınıfın yöntemlerine geçirmek için sınıfını XmlSchemaValidator kullanırXmlSerializer.
Not
Bu örnek, bu konunun tüm bölümlerinde kullanılır.
C#
using System;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;
using System.Collections;
namespaceMicrosoft.Samples.Xml.Schema
{
classXmlSchemaValidatorExamples
{
staticvoidMain()
{
// The XML document to deserialize into the XmlSerializer object.
XmlReader reader = XmlReader.Create("contosoBooks.xml");
// The XmlSerializer object.
XmlSerializer serializer = new XmlSerializer(typeof(ContosoBooks));
ContosoBooks books = (ContosoBooks)serializer.Deserialize(reader);
// The XmlSchemaSet object containing the schema used to validate the XML document.
XmlSchemaSet schemaSet = new XmlSchemaSet();
schemaSet.Add("http://www.contoso.com/books", "contosoBooks.xsd");
// The XmlNamespaceManager object used to handle namespaces.
XmlNamespaceManager manager = new XmlNamespaceManager(reader.NameTable);
// Assign a ValidationEventHandler to handle schema validation warnings and errors.
XmlSchemaValidator validator = new XmlSchemaValidator(reader.NameTable, schemaSet, manager, XmlSchemaValidationFlags.None);
validator.ValidationEventHandler += new ValidationEventHandler(SchemaValidationEventHandler);
// Initialize the XmlSchemaValidator object.
validator.Initialize();
// Validate the bookstore element, verify that all required attributes are present// and prepare to validate child content.
validator.ValidateElement("bookstore", "http://www.contoso.com/books", null);
validator.GetUnspecifiedDefaultAttributes(new ArrayList());
validator.ValidateEndOfAttributes(null);
// Get the next expected element in the bookstore context.
XmlSchemaParticle[] particles = validator.GetExpectedParticles();
XmlSchemaElement nextElement = particles[0] as XmlSchemaElement;
Console.WriteLine("Expected Element: '{0}'", nextElement.Name);
foreach (BookType book in books.Book)
{
// Validate the book element.
validator.ValidateElement("book", "http://www.contoso.com/books", null);
// Get the expected attributes for the book element.
Console.Write("\nExpected attributes: ");
XmlSchemaAttribute[] attributes = validator.GetExpectedAttributes();
foreach (XmlSchemaAttribute attribute in attributes)
{
Console.Write("'{0}' ", attribute.Name);
}
Console.WriteLine();
// Validate the genre attribute and display its post schema validation information.if (book.Genre != null)
{
validator.ValidateAttribute("genre", "", book.Genre, schemaInfo);
}
DisplaySchemaInfo();
// Validate the publicationdate attribute and display its post schema validation information.if (book.PublicationDate != null)
{
validator.ValidateAttribute("publicationdate", "", dateTimeGetter(book.PublicationDate), schemaInfo);
}
DisplaySchemaInfo();
// Validate the ISBN attribute and display its post schema validation information.if (book.Isbn != null)
{
validator.ValidateAttribute("ISBN", "", book.Isbn, schemaInfo);
}
DisplaySchemaInfo();
// After validating all the attributes for the current element with ValidateAttribute method,// you must call GetUnspecifiedDefaultAttributes to validate the default attributes.
validator.GetUnspecifiedDefaultAttributes(new ArrayList());
// Verify that all required attributes of the book element are present// and prepare to validate child content.
validator.ValidateEndOfAttributes(null);
// Validate the title element and its content.
validator.ValidateElement("title", "http://www.contoso.com/books", null);
validator.ValidateEndElement(null, book.Title);
// Validate the author element, verify that all required attributes are present// and prepare to validate child content.
validator.ValidateElement("author", "http://www.contoso.com/books", null);
validator.GetUnspecifiedDefaultAttributes(new ArrayList());
validator.ValidateEndOfAttributes(null);
if (book.Author.Name != null)
{
// Validate the name element and its content.
validator.ValidateElement("name", "http://www.contoso.com/books", null);
validator.ValidateEndElement(null, book.Author.Name);
}
if (book.Author.FirstName != null)
{
// Validate the first-name element and its content.
validator.ValidateElement("first-name", "http://www.contoso.com/books", null);
validator.ValidateEndElement(null, book.Author.FirstName);
}
if (book.Author.LastName != null)
{
// Validate the last-name element and its content.
validator.ValidateElement("last-name", "http://www.contoso.com/books", null);
validator.ValidateEndElement(null, book.Author.LastName);
}
// Validate the content of the author element.
validator.ValidateEndElement(null);
// Validate the price element and its content.
validator.ValidateElement("price", "http://www.contoso.com/books", null);
validator.ValidateEndElement(null, book.Price);
// Validate the content of the book element.
validator.ValidateEndElement(null);
}
// Validate the content of the bookstore element.
validator.ValidateEndElement(null);
// Close the XmlReader object.
reader.Close();
}
static XmlSchemaInfo schemaInfo = new XmlSchemaInfo();
staticobject dateTimeGetterContent;
staticobjectdateTimeGetterHandle()
{
return dateTimeGetterContent;
}
static XmlValueGetter dateTimeGetter(DateTime dateTime)
{
dateTimeGetterContent = dateTime;
returnnew XmlValueGetter(dateTimeGetterHandle);
}
staticvoidDisplaySchemaInfo()
{
if (schemaInfo.SchemaElement != null)
{
Console.WriteLine("Element '{0}' with type '{1}' is '{2}'",
schemaInfo.SchemaElement.Name, schemaInfo.SchemaType, schemaInfo.Validity);
}
elseif (schemaInfo.SchemaAttribute != null)
{
Console.WriteLine("Attribute '{0}' with type '{1}' is '{2}'",
schemaInfo.SchemaAttribute.Name, schemaInfo.SchemaType, schemaInfo.Validity);
}
}
staticvoidSchemaValidationEventHandler(object sender, ValidationEventArgs e)
{
switch (e.Severity)
{
case XmlSeverityType.Error:
Console.WriteLine("\nError: {0}", e.Message);
break;
case XmlSeverityType.Warning:
Console.WriteLine("\nWarning: {0}", e.Message);
break;
}
}
}
[XmlRootAttribute("bookstore", Namespace = "http://www.contoso.com/books", IsNullable = false)]
publicclassContosoBooks
{
[XmlElementAttribute("book")]
public BookType[] Book;
}
publicclassBookType
{
[XmlAttributeAttribute("genre")]
publicstring Genre;
[XmlAttributeAttribute("publicationdate", DataType = "date")]
public DateTime PublicationDate;
[XmlAttributeAttribute("ISBN")]
publicstring Isbn;
[XmlElementAttribute("title")]
publicstring Title;
[XmlElementAttribute("author")]
public BookAuthor Author;
[XmlElementAttribute("price")]
public Decimal Price;
}
publicclassBookAuthor
{
[XmlElementAttribute("name")]
publicstring Name;
[XmlElementAttribute("first-name")]
publicstring FirstName;
[XmlElementAttribute("last-name")]
publicstring LastName;
}
}
Imports System.Xml
Imports System.Xml.Schema
Imports System.Xml.Serialization
Imports System.Collections
Namespace Microsoft.Samples.Xml.Schema
Class XmlSchemaValidatorExamples
Shared Sub Main()
' The XML document to deserialize into the XmlSerializer object.
Dim reader As XmlReader = XmlReader.Create("contosoBooks.xml")
' The XmlSerializer object.
Dim serializer As XmlSerializer = New XmlSerializer(GetType(ContosoBooks))
Dim books As ContosoBooks = CType(serializer.Deserialize(reader), ContosoBooks)
' The XmlSchemaSet object containing the schema used to validate the XML document.
Dim schemaSet As XmlSchemaSet = New XmlSchemaSet()
schemaSet.Add("http://www.contoso.com/books", "contosoBooks.xsd")
' The XmlNamespaceManager object used to handle namespaces.
Dim manager As XmlNamespaceManager = New XmlNamespaceManager(reader.NameTable)
' Assign a ValidationEventHandler to handle schema validation warnings and errors.
Dim validator As XmlSchemaValidator = New XmlSchemaValidator(reader.NameTable, schemaSet, manager, XmlSchemaValidationFlags.None)
'validator.ValidationEventHandler += New ValidationEventHandler(SchemaValidationEventHandler)
AddHandler validator.ValidationEventHandler, AddressOf SchemaValidationEventHandler
' Initialize the XmlSchemaValidator object.
validator.Initialize()
' Validate the bookstore element, verify that all required attributes are present
' and prepare to validate child content.
validator.ValidateElement("bookstore", "http://www.contoso.com/books", Nothing)
validator.GetUnspecifiedDefaultAttributes(New ArrayList())
validator.ValidateEndOfAttributes(Nothing)
' Get the next expected element in the bookstore context.
Dim particles() As XmlSchemaParticle = validator.GetExpectedParticles()
Dim nextElement As XmlSchemaElement = particles(0)
Console.WriteLine("Expected Element: '{0}'", nextElement.Name)
For Each book As BookType In books.book
' Validate the book element.
validator.ValidateElement("book", "http://www.contoso.com/books", Nothing)
' Get the expected attributes for the book element.
Console.Write(vbCrLf & "Expected attributes: ")
Dim attributes() As XmlSchemaAttribute = validator.GetExpectedAttributes()
For Each attribute As XmlSchemaAttribute In attributes
Console.Write("'{0}' ", attribute.Name)
Next
Console.WriteLine()
' Validate the genre attribute and display its post schema validation information.
If Not book.Genre Is Nothing Then
validator.ValidateAttribute("genre", "", book.Genre, schemaInfo)
End If
DisplaySchemaInfo()
' Validate the publicationdate attribute and display its post schema validation information.
If Not book.PublicationDate = Nothing Then
validator.ValidateAttribute("publicationdate", "", dateTimeGetter(book.PublicationDate), schemaInfo)
End If
DisplaySchemaInfo()
' Validate the ISBN attribute and display its post schema validation information.
If Not book.Isbn Is Nothing Then
validator.ValidateAttribute("ISBN", "", book.Isbn, schemaInfo)
End If
DisplaySchemaInfo()
' After validating all the attributes for the current element with ValidateAttribute method,
' you must call GetUnspecifiedDefaultAttributes to validate the default attributes.
validator.GetUnspecifiedDefaultAttributes(New ArrayList())
' Verify that all required attributes of the book element are present
' and prepare to validate child content.
validator.ValidateEndOfAttributes(Nothing)
' Validate the title element and its content.
validator.ValidateElement("title", "http://www.contoso.com/books", Nothing)
validator.ValidateEndElement(Nothing, book.Title)
' Validate the author element, verify that all required attributes are present
' and prepare to validate child content.
validator.ValidateElement("author", "http://www.contoso.com/books", Nothing)
validator.GetUnspecifiedDefaultAttributes(New ArrayList())
validator.ValidateEndOfAttributes(Nothing)
If Not book.Author.Name Is Nothing Then
' Validate the name element and its content.
validator.ValidateElement("name", "http://www.contoso.com/books", Nothing)
validator.ValidateEndElement(Nothing, book.Author.Name)
End If
If Not book.Author.FirstName Is Nothing Then
' Validate the first-name element and its content.
validator.ValidateElement("first-name", "http://www.contoso.com/books", Nothing)
validator.ValidateEndElement(Nothing, book.Author.FirstName)
End If
If Not book.Author.LastName Is Nothing Then
' Validate the last-name element and its content.
validator.ValidateElement("last-name", "http://www.contoso.com/books", Nothing)
validator.ValidateEndElement(Nothing, book.Author.LastName)
End If
' Validate the content of the author element.
validator.ValidateEndElement(Nothing)
' Validate the price element and its content.
validator.ValidateElement("price", "http://www.contoso.com/books", Nothing)
validator.ValidateEndElement(Nothing, book.Price)
' Validate the content of the book element.
validator.ValidateEndElement(Nothing)
Next
' Validate the content of the bookstore element.
validator.ValidateEndElement(Nothing)
' Close the XmlReader object.
reader.Close()
End Sub
Shared schemaInfo As XmlSchemaInfo = New XmlSchemaInfo()
Shared dateTimeGetterContent As Object
Shared Function dateTimeGetterHandle() As Object
Return dateTimeGetterContent
End Function
Shared Function dateTimeGetter(ByVal dateTime As DateTime) As XmlValueGetter
dateTimeGetterContent = dateTime
Return New XmlValueGetter(AddressOf dateTimeGetterHandle)
End Function
Shared Sub DisplaySchemaInfo()
If Not schemaInfo.SchemaElement Is Nothing Then
Console.WriteLine("Element '{0}' with type '{1}' is '{2}'", schemaInfo.SchemaElement.Name, schemaInfo.SchemaType, schemaInfo.Validity)
ElseIf Not schemaInfo.SchemaAttribute Is Nothing Then
Console.WriteLine("Attribute '{0}' with type '{1}' is '{2}'", schemaInfo.SchemaAttribute.Name, schemaInfo.SchemaType, schemaInfo.Validity)
End If
End Sub
Shared Sub SchemaValidationEventHandler(ByVal sender As Object, ByVal e As ValidationEventArgs)
Select Case e.Severity
Case XmlSeverityType.Error
Console.WriteLine(vbCrLf & "Error: {0}", e.Message)
Exit Sub
Case XmlSeverityType.Warning
Console.WriteLine(vbCrLf & "Warning: {0}", e.Message)
Exit Sub
End Select
End Sub
End Class
<XmlRootAttribute("bookstore", Namespace:="http://www.contoso.com/books", IsNullable:=False)> _
Public Class ContosoBooks
<XmlElementAttribute("book")> _
Public book() As BookType
End Class
Public Class BookType
<XmlAttributeAttribute("genre")> _
Public Genre As String
<XmlAttributeAttribute("publicationdate", DataType:="date")> _
Public PublicationDate As DateTime
<XmlAttributeAttribute("ISBN")> _
Public Isbn As String
<XmlElementAttribute("title")> _
Public Title As String
<XmlElementAttribute("author")> _
Public Author As BookAuthor
<XmlElementAttribute("price")> _
Public Price As Decimal
End Class
Public Class BookAuthor
<XmlElementAttribute("name")> _
Public Name As String
<XmlElementAttribute("first-name")> _
Public FirstName As String
<XmlElementAttribute("last-name")> _
Public LastName As String
End Class
End Namespace
Örnek, dosyayı giriş olarak alır contosoBooks.xml .
XML
<?xml version="1.0" encoding="utf-8" ?><bookstorexmlns="http://www.contoso.com/books"><bookgenre="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><bookgenre="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><bookgenre="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>
XmlSchemaValidator kullanarak XML Verilerini Doğrulama
XML bilgi kümesini doğrulamaya başlamak için önce oluşturucuyu kullanarak XmlSchemaValidator sınıfın XmlSchemaValidator yeni bir örneğini başlatmanız gerekir.
OluşturucuXmlSchemaValidator, parametre olarak , XmlSchemaSetve XmlNamespaceManager nesnelerinin yanı sıra parametre olarak da bir XmlSchemaValidationFlags değer alırXmlNameTable. XmlNameTable nesnesi şema ad alanı, XML ad alanı vb. gibi bilinen ad alanı dizelerini atomize etmek için kullanılır ve basit içerik doğrulanırken yöntemine ParseValue geçirilir. nesnesi, XmlSchemaSet XML bilgi kümesi doğrulamak için kullanılan XML şemalarını içerir. XmlNamespaceManager nesnesi, doğrulama sırasında karşılaşılan ad alanlarını çözümlemek için kullanılır. XmlSchemaValidationFlags değeri, doğrulamanın belirli özelliklerini devre dışı bırakmak için kullanılır.
Dim schemaSet As XmlSchemaSet = New XmlSchemaSet()
schemaSet.Add(Nothing, "schema.xsd")
schemaSet.Compile()
Dim nameTable As NameTable = New NameTable()
Dim manager As XmlNamespaceManager = New XmlNamespaceManager(nameTable)
Dim validator As XmlSchemaValidator = New XmlSchemaValidator(nameTable, schemaSet, manager, XmlSchemaValidationFlags.None)
validator.Initialize(schemaSet.GlobalElements.Item(New XmlQualifiedName("orderNumber")))
validator.ValidateElement("orderNumber", "", Nothing)
validator.ValidateEndOfAttributes(Nothing)
validator.ValidateText("123")
validator.ValidateEndElement(Nothing)
C#
XmlSchemaSet schemaSet = new XmlSchemaSet();
schemaSet.Add(null, "schema.xsd");
schemaSet.Compile();
NameTable nameTable = new NameTable();
XmlNamespaceManager manager = new XmlNamespaceManager(nameTable);
XmlSchemaValidator validator = new XmlSchemaValidator(nameTable, schemaSet, manager, XmlSchemaValidationFlags.None);
validator.Initialize(schemaSet.GlobalElements[new XmlQualifiedName("orderNumber")]);
validator.ValidateElement("orderNumber", "", null);
validator.ValidateEndOfAttributes(null);
validator.ValidateText("123");
validator.ValidateEndElement(null);
AddSchema sınıfının yöntemiXmlSchemaValidator, doğrulama sırasında kullanılan şema kümesine xml şeması eklemek için kullanılır. yöntemi, AddSchema doğrulanan XML bilgi kümesinde bir satır içi XML şemasıyla karşılaşmanın etkisinin benzetimini yapmak için kullanılabilir.
Not
parametresinin XmlSchema hedef ad alanı, nesne tarafından zaten karşılaşılan herhangi bir öğe veya özniteliğin ad alanıyla XmlSchemaValidator eşleşemez.
yönteminin AddSchema sonucu geçerli XML düğümü bağlamının doğrulandığına bağlıdır. Doğrulama bağlamları hakkında daha fazla bilgi için bu konunun "Doğrulama Bağlamı" bölümüne bakın.
sınıfı xml XmlSchemaValidator şemalarına karşı bir XML bilgi kümesindeki öğeleri, öznitelikleri ve içeriği doğrulamak için kullanılan çeşitli yöntemler sağlar. Aşağıdaki tabloda bu yöntemlerin her biri açıklanmaktadır.
Öğe bağlamındaki tüm gerekli özniteliklerin mevcut olup olmadığını doğrular ve öğesinin XmlSchemaValidator alt içeriğini doğrulamak için nesnesini hazırlar.
Geçerli öğe bağlamında boşluklara izin verilip verilmeyeceğini doğrular ve geçerli öğenin basit içeriği olup olmadığını doğrulamak için boşluk biriktirir.
Öğenin metin içeriğinin basit içeriğe sahip öğeler için veri türüne göre geçerli olup olmadığını doğrular ve geçerli öğenin içeriğinin karmaşık içeriğe sahip öğeler için tamamlanıp tamamlanmadığını doğrular.
Doğrulama seçeneğinin ayarlanması durumunda doğrulamayı sonlandırır ve XML belgesinin ProcessIdentityConstraints tamamı için kimlik kısıtlamalarını denetler.
Not
sınıfı, XmlSchemaValidator önceki tabloda açıklanan yöntemlerin her birine yapılan çağrıların sırasını ve oluşumunu zorlayan tanımlı bir durum geçişi içerir. Sınıfın XmlSchemaValidator belirli durum geçişi, bu konunun "XmlSchemaValidator Durum Geçişi" bölümünde açıklanmıştır.
XML bilgi kümesindeki öğeleri, öznitelikleri ve içeriği doğrulamak için kullanılan yöntemlere örnek için önceki bölümdeki örneklere bakın. Bu yöntemler hakkında daha fazla bilgi için sınıf başvurusu belgelerine XmlSchemaValidator bakın.
XmlValueGetter Kullanarak İçeriği Doğrulama
XmlValueGetterdelegate özniteliği, metin veya boşluk düğümlerinin değerini, özniteliğin, metnin veya boşluk düğümünün XML Şema Tanım Dili (XSD) türüyle uyumlu ortak dil çalışma zamanı (CLR) türleri olarak geçirmek için kullanılabilir. bir XmlValueGetterdelegate özniteliğin, metnin veya boşluk düğümünün CLR değeri zaten kullanılabiliyorsa ve bunu bir string öğesine dönüştürmenin ve sonra doğrulama için yeniden ayrıştırma maliyetinin önüne geçerse yararlıdır.
Aşağıda, girişteki XmlSchemaValidator sınıf örneğinden alınan bir örnek XmlValueGetterdelegate verilmiştir. özniteliğinin XmlValueGetterdelegate değerini nesne olarak DateTime döndürür. tarafından XmlValueGetterdöndürülen bu DateTime nesneyi doğrulamak için, nesne önce özniteliğin XmlSchemaValidator veri türü için ValueType'a dönüştürür (ValueType, XSD türü için varsayılan CLR eşlemesidir) ve ardından dönüştürülen değerdeki modelleri denetler.
Shared dateTimeGetterContent As Object
Shared Function DateTimeGetterHandle() As Object
Return dateTimeGetterContent
End Function
Shared Function DateTimeGetter(dateTime As DateTime) As XmlValueGetter
dateTimeGetterContent = dateTime
Return New XmlValueGetter(AddressOf DateTimeGetterHandle)
End Function
sınıfı, XmlSchemaInfo sınıfı tarafından doğrulanan bir XML düğümünün Şema Sonrası Doğrulama Bilgileri'nin XmlSchemaValidator bazılarını temsil eder. Sınıfın XmlSchemaValidator çeşitli yöntemleri, isteğe bağlı (null) out parametre olarak bir XmlSchemaInfo nesneyi kabul eder.
Sınıfın XmlSchemaInfo tam bir örneği için girişteki örne bakın. Sınıf hakkında XmlSchemaInfo daha fazla bilgi için sınıf başvurusu belgelerine XmlSchemaInfo bakın.
Beklenen Parçacıklar, Öznitelikler ve Belirtilmemiş Varsayılan Öznitelikleri Alma
Con çadır modu l için bir oluşturan bir xs:sequenceolduğunda, dizideki yalnızca sonraki parçacık döndürülür. Con çadır modu l için oluşturan bir xs:all veya xs:choiceise, geçerli eleman bağlamında izleyebilecek tüm geçerli parçacıklar döndürülür.
Örneğin, izleyen XML Şema Tanım Dili (XSD) şemasında ve XML belgesinde, öğe book doğrulandıktan book sonra geçerli öğe bağlamıdır. yöntemi, GetExpectedParticles öğesini temsil eden title tek XmlSchemaElement bir nesne içeren bir dizi döndürür. Doğrulama bağlamı öğesi olduğunda title , GetExpectedParticles yöntemi boş bir dizi döndürür. GetExpectedParticles yöntemi öğe doğrulandıktan sonra title ancak öğe doğrulanmadan önce description çağrılırsa, öğesini temsil eden description tek XmlSchemaElement bir nesne içeren bir dizi döndürür. GetExpectedParticles öğesi doğrulandıktan sonra description yöntemi çağrılırsa joker karakteri temsil eden tek XmlSchemaAny bir nesne içeren bir dizi döndürür.
Dim reader As XmlReader = XmlReader.Create("input.xml")
Dim schemaSet As New XmlSchemaSet()
schemaSet.Add(Nothing, "schema.xsd")
Dim manager As New XmlNamespaceManager(reader.NameTable)
Dim validator As New XmlSchemaValidator(reader.NameTable,schemaSet,manager,XmlSchemaValidationFlags.None)
validator.Initialize()
validator.ValidateElement("book", "", Nothing)
validator.ValidateEndOfAttributes(Nothing)
For Each element As XmlSchemaElement In validator.GetExpectedParticles()
Console.WriteLine(element.Name)
Next
validator.ValidateElement("title", "", Nothing)
validator.ValidateEndOfAttributes(Nothing)
For Each element As XmlSchemaElement In validator.GetExpectedParticles()
Console.WriteLine(element.Name)
Next
validator.ValidateEndElement(Nothing)
For Each element As XmlSchemaElement In validator.GetExpectedParticles()
Console.WriteLine(element.Name)
Next
validator.ValidateElement("description", "", Nothing)
validator.ValidateEndOfAttributes(Nothing)
validator.ValidateEndElement(Nothing)
For Each particle As XmlSchemaParticle In validator.GetExpectedParticles()
Console.WriteLine(particle.GetType())
Next
validator.ValidateElement("namespace", "", Nothing)
validator.ValidateEndOfAttributes(Nothing)
validator.ValidateEndElement(Nothing)
validator.ValidateEndElement(Nothing)
C#
XmlReader reader = XmlReader.Create("input.xml");
var schemaSet = new XmlSchemaSet();
schemaSet.Add(null, "schema.xsd");
var manager = new XmlNamespaceManager(reader.NameTable);
var validator = new XmlSchemaValidator(reader.NameTable, schemaSet, manager, XmlSchemaValidationFlags.None);
validator.Initialize();
validator.ValidateElement("book", "", null);
validator.ValidateEndOfAttributes(null);
foreach (XmlSchemaElement element in validator.GetExpectedParticles())
{
Console.WriteLine(element.Name);
}
validator.ValidateElement("title", "", null);
validator.ValidateEndOfAttributes(null);
foreach (XmlSchemaElement element in validator.GetExpectedParticles())
{
Console.WriteLine(element.Name);
}
validator.ValidateEndElement(null);
foreach (XmlSchemaElement element in validator.GetExpectedParticles())
{
Console.WriteLine(element.Name);
}
validator.ValidateElement("description", "", null);
validator.ValidateEndOfAttributes(null);
validator.ValidateEndElement(null);
foreach (XmlSchemaParticle particle in validator.GetExpectedParticles())
{
Console.WriteLine(particle.GetType());
}
validator.ValidateElement("namespace", "", null);
validator.ValidateEndOfAttributes(null);
validator.ValidateEndElement(null);
validator.ValidateEndElement(null);
Örneğin, girişteki örnekte yöntemi, GetExpectedAttributes öğesinin tüm özniteliklerini book almak için kullanılır.
yönteminden GetExpectedAttributes hemen sonra ValidateElement yöntemini çağırırsanız, XML belgesinde görünebilen tüm öznitelikler döndürülür. Ancak yöntemine GetExpectedAttributes yapılan bir veya daha fazla çağrıdan ValidateAttribute sonra yöntemini çağırırsanız, geçerli öğe için henüz doğrulanmamış öznitelikler döndürülür.
Aşağıda, girişteki örnekten alınan şema doğrulaması sırasında karşılaşılan şema doğrulama uyarılarını ve hatalarını alan bir ValidationEventHandler örnek verilmiştir.
Shared Sub SchemaValidationEventHandler(sender As Object, e As ValidationEventArgs)
Select Case e.Severity
Case XmlSeverityType.Error
Console.WriteLine(vbCrLf & "Error: {0}", e.Message)
Exit Sub
Case XmlSeverityType.Warning
Console.WriteLine(vbCrLf & "Warning: {0}", e.Message)
Exit Sub
End Select
End Sub
sınıfı, XmlSchemaValidator xml bilgi kümesindeki öğeleri, öznitelikleri ve içeriği doğrulamak için kullanılan yöntemlerin her birine yapılan çağrıların sırasını ve oluşumunu zorlayan tanımlı bir durum geçişi içerir.
Aşağıdaki tabloda sınıfın durum geçişi XmlSchemaValidator ve her durumda yapılabilecek yöntem çağrılarının dizisi ve oluşumu açıklanmaktadır.
yöntemine InvalidOperationException yapılan çağrı, bir XmlSchemaValidator nesnenin geçerli durumuna göre yanlış sırada yapıldığında yukarıdaki tablodaki yöntemlerin her biri tarafından oluşturulur.
Yukarıdaki durum geçiş tablosu, sınıfın durum geçişinin XmlSchemaValidator her durumu için çağrılabilecek yöntemleri ve diğer durumları açıklamak için noktalama işaretlerini kullanır. Kullanılan simgeler, Belge Türü Tanımı (DTD) için XML Standartları başvurusunda bulunan simgelerle aynıdır.
Aşağıdaki tabloda, yukarıdaki durum geçiş tablosunda bulunan noktalama simgelerinin, sınıfın durum geçişindeki XmlSchemaValidator her durum için çağrılabilen yöntemleri ve diğer durumları nasıl etkilediği açıklanmaktadır.
Simge
Açıklama
|
Yöntem veya durum (çubuk öncesi veya sonrasındaki) çağrılabilir.
?
Soru işaretinin önündeki yöntem veya durum isteğe bağlıdır, ancak çağrılırsa yalnızca bir kez çağrılabilir.
*
* simgesinden önce gelen yöntem veya durum isteğe bağlıdır ve birden çok kez çağrılabilir.
Doğrulama Bağlamı
XML bilgi kümesindeki XmlSchemaValidator öğeleri, öznitelikleri ve içeriği doğrulamak için kullanılan sınıfın yöntemleri, nesnenin XmlSchemaValidator doğrulama bağlamını değiştirir. Örneğin, SkipToEndElement yöntemi geçerli öğe içeriğini doğrulamayı atlar ve nesneyi üst öğenin bağlamındaki içeriği doğrulamak için hazırlar XmlSchemaValidator ; geçerli öğenin tüm alt öğeleri için doğrulamayı atlayıp yöntemini çağırmaya ValidateEndElement eşdeğerdir.
Aşağıdaki tabloda, xml bilgi kümesindeki öğeleri, öznitelikleri ve içeriği doğrulamak için kullanılan sınıfın XmlSchemaValidator yöntemlerinden birini çağırdıktan sonra bu yöntemleri çağırmanın sonuçları açıklanmaktadır.
Bağlam öğesi geçerliyse ve çağrısı daha önce yapılmadıysa ValidateAttribute , GetExpectedAttributes bağlam öğesinde tanımlanan tüm özniteliklerin listesini döndürür.
Bazı öznitelikler zaten doğrulanmışsa, GetExpectedAttributes doğrulanacak kalan özniteliklerin listesini döndürür.
Bağlam öğesinin contentType değeri Karma ise, GetExpectedParticles sonraki konumda beklenen öğelerin sırasını döndürür.
Bağlam öğesinin contentType değeri TextOnly veya Empty ise boş GetExpectedParticles bir dizi döndürür.
Bağlam öğesinin contentType öğesi ElementOnly ise, GetExpectedParticles sonraki konumda beklenen öğelerin sırasını döndürür, ancak bir doğrulama hatası zaten oluştu.
Bağlam öğesinin üst GetExpectedAttributes öğesi yoksa boş bir liste döndürür (bağlam öğesi, üzerinde çağrılan ValidateEndElement geçerli öğenin üst öğesidir).
Sınıfın çeşitli özellikleri XmlSchemaValidator tarafından döndürülen değerler, yukarıdaki tabloda yer alan yöntemlerden herhangi biri çağrılarak değiştirilmez.
Bu içeriğin kaynağı GitHub'da bulunabilir; burada ayrıca sorunları ve çekme isteklerini oluşturup gözden geçirebilirsiniz. Daha fazla bilgi için katkıda bulunan kılavuzumuzu inceleyin.
.NET geri bildirimi
.NET, açık kaynak bir projedir. Geri bildirim sağlamak için bir bağlantı seçin:
Diğer geliştiriciler ve uzmanlarla gerçek dünyadaki kullanım örneklerini temel alan ölçeklenebilir yapay zeka çözümleri oluşturmak için toplantı serisine katılın.