Validation de schéma XML (XSD) par rapport à plusieurs schémas
Vous pouvez utiliser l'objet XmlValidatingReader pour valider des documents XML par rapport à des schémas en langage XSD (XML Schema Definition) issus de plusieurs schémas.
Remarque |
---|
La classe XmlValidatingReader est obsolète dans le .NET Framework version 2.0.Vous pouvez créer une instance de l'objet XmlReader de validation à l'aide de la classe XmlReaderSettings et de la méthode Create.Pour plus d'informations, voir Validation de données XML avec XmlReader. |
Exemple
L'exemple de code suivant crée un objet XmlValidatingReader qui prend comme entrée un flux de fichier, Mixed.xml, et qui valide les fragments XML par rapport à plusieurs sources de schémas. Le constructeur XmlValidatingReader prend un flux d'un fragment XML, un objet XmlNodeType et un objet XmlParserContext.
Remarque |
---|
Dans l'exemple suivant, l'élément de niveau supérieur n'est pas validé.L'objet XmlValidatingReader génère un avertissement pour l'élément racine si la propriété ValidationType a la valeur ValidationType.Schema. |
Imports System
Imports System.IO
Imports System.Xml
Imports System.Xml.Schema
Namespace ValidationSample
Class Sample
Public Shared Sub Main()
Dim stream As New FileStream("Mixed.xml", FileMode.Open)
Dim vr As New XmlValidatingReader(stream, XmlNodeType.Element, Nothing)
vr.Schemas.Add(Nothing, "Book.xsd")
vr.Schemas.Add(Nothing, "Tape.xsd")
vr.ValidationType = ValidationType.Schema
AddHandler vr.ValidationEventHandler, AddressOf ValidationHandler
While vr.Read()
End While
Console.WriteLine("Validation finished")
End Sub
' Main
Public Shared Sub ValidationHandler(sender As Object, args As ValidationEventArgs)
Console.WriteLine("***Validation error")
Console.WriteLine("Severity:{0}", args.Severity)
Console.WriteLine("Message:{0}", args.Message)
End Sub
' ValidationHandler
End Class
' Sample
End Namespace
' ValidationSample
using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;
namespace ValidationSample
{
class Sample
{
public static void Main()
{
FileStream stream = new FileStream("Mixed.xml", FileMode.Open);
XmlValidatingReader vr = new XmlValidatingReader(stream, XmlNodeType.Element, null);
vr.Schemas.Add(null, "Book.xsd");
vr.Schemas.Add(null, "Tape.xsd");
vr.ValidationType = ValidationType.Schema;
vr.ValidationEventHandler += new ValidationEventHandler (ValidationHandler);
while(vr.Read());
Console.WriteLine("Validation finished");
}
public static void ValidationHandler(object sender, ValidationEventArgs args)
{
Console.WriteLine("***Validation error");
Console.WriteLine("\tSeverity:{0}", args.Severity);
Console.WriteLine("\tMessage:{0}", args.Message);
}
}
}
Le code suivant présente le contenu du fichier de schéma XML, Book.xsd, par rapport auquel la validation doit s'effectuer.
<xs:schema xmlns="urn:bookstore-schema"
targetNamespace="urn:bookstore-schema"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="book">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="price" type="xs:decimal" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>
Le code suivant présente le contenu du fichier de schéma XML, Tape.xsd, par rapport auquel la validation doit s'effectuer.
<xs:schema xmlns="urn:tapestore-schema"
targetNamespace="urn:tapestore-schema"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="tape" type="xs:string"/>
</xs:schema>
Le code suivant présente le contenu du flux XML, Mixed.xml, où figurent les fragments XML à valider.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="urn:dvdstore-schema" targetNamespace="urn:dvdstore-schema">
<xs:element name="dvd" type="xs:string" />
</xs:schema>
<pb:book price="7.99" xmlns:pb="urn:bookstore-schema">The Autobiography of Benjamin Franklin</pb:book>
<pd:dvd xmlns:pd="urn:dvdstore-schema">The Godfather</pd:dvd>
<pt:tape xmlns:pt="urn:tapestore-schema" xsi:schemaLocation="urn:tapestore-schema tape.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Il Postino</pt:tape>