Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les documents XML peuvent être validés par rapport à un schéma XSD (XML Schema Definition Language) dans un XmlSchemaSet.
Valider des documents XML
Les documents XML sont validés par la Create méthode de la XmlReader classe. Pour valider un document XML, construisez un XmlReaderSettings objet qui contient un schéma XSD (XML Schema Definition Language) avec lequel valider le document XML.
Remarque
L’espace System.Xml.Schema de noms contient des méthodes d’extension qui facilitent la validation d’une arborescence XML par rapport à un fichier XSD lors de l’utilisation de LINQ to XML (C#) et LINQ to XML (Visual Basic). Pour plus d’informations sur la validation de documents XML avec LINQ to XML, consultez Comment valider à l’aide de XSD (LINQ to XML) (C#) et How to : Validate Using XSD (LINQ to XML) (Visual Basic).
Un schéma individuel ou un ensemble de schémas (sous la forme d’un XmlSchemaSet) peut être ajouté à un XmlSchemaSet en passant l’un en tant que paramètre à la Add méthode de XmlSchemaSet. Lors de la validation d’un document, l’espace de noms cible du document doit correspondre à l’espace de noms cible du schéma dans le jeu de schémas.
Voici un exemple de document XML.
<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>
Voici le schéma qui valide l’exemple de document XML.
<?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>
Dans l’exemple de code suivant, le schéma ci-dessus est ajouté à la Schemas propriété de l’objet XmlReaderSettings . L’objet XmlReaderSettings est passé en tant que paramètre à la Create méthode de l’objet XmlReader , qui valide le document XML ci-dessus.
La propriété ValidationType de l’objet XmlReaderSettings est définie sur Schema
pour appliquer la validation du document XML par la méthode Create de l’objet XmlReader. A ValidationEventHandler est ajouté à l’objet XmlReaderSettings pour gérer tous Warning les Error événements déclenchés par des erreurs détectées pendant le processus de validation du document XML et du schéma.
using System;
using System.Xml;
using System.Xml.Schema;
class XmlSchemaSetExample
{
static void Main()
{
XmlReaderSettings booksSettings = new XmlReaderSettings();
booksSettings.Schemas.Add("http://www.contoso.com/books", "books.xsd");
booksSettings.ValidationType = ValidationType.Schema;
booksSettings.ValidationEventHandler += booksSettingsValidationEventHandler;
XmlReader books = XmlReader.Create("books.xml", booksSettings);
while (books.Read()) { }
}
static void booksSettingsValidationEventHandler(object sender, ValidationEventArgs e)
{
if (e.Severity == XmlSeverityType.Warning)
{
Console.Write("WARNING: ");
Console.WriteLine(e.Message);
}
else if (e.Severity == XmlSeverityType.Error)
{
Console.Write("ERROR: ");
Console.WriteLine(e.Message);
}
}
}
Imports System.Xml
Imports System.Xml.Schema
Class XmlSchemaSetExample
Shared Sub Main()
Dim booksSettings As XmlReaderSettings = New XmlReaderSettings()
booksSettings.Schemas.Add("http://www.contoso.com/books", "books.xsd")
booksSettings.ValidationType = ValidationType.Schema
AddHandler booksSettings.ValidationEventHandler, New ValidationEventHandler(AddressOf booksSettingsValidationEventHandler)
Dim books As XmlReader = XmlReader.Create("books.xml", booksSettings)
While books.Read()
End While
End Sub
Shared Sub booksSettingsValidationEventHandler(ByVal sender As Object, ByVal e As ValidationEventArgs)
If e.Severity = XmlSeverityType.Warning Then
Console.Write("WARNING: ")
Console.WriteLine(e.Message)
ElseIf e.Severity = XmlSeverityType.Error Then
Console.Write("ERROR: ")
Console.WriteLine(e.Message)
End If
End Sub
End Class