Comment faire pour contrôler les fragments XML avec un schéma XML dans Visual Basic .NET

Traductions disponibles Traductions disponibles
Numéro d'article: 317463 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Sommaire

Résumé

Cet article étape par étape explique comment utiliser des objets XmlValidatingReader et XMLSchemaCollection pour valider un fragment XML (Extensible Markup Language) par rapport à un schéma XML.

XmlValidatingReader implémente la classe XmlReader et fournit de prise en charge pour la validation de données XML. La propriété de schémas de XmlValidatingReader connecte au lecteur aux fichiers de schéma mis en cache dans un XmlSchemaCollection . La propriété ValidationType de XmlValidatingReader spécifie le type de validation que le lecteur doit exécuter. Si vous définissez la propriété à ValidationType.None , vous pouvez créer un lecteur nonvalidating.

Vous pouvez uniquement ajouter des schémas XML Schema Definition Language (XSD) et les schémas (XML-Data REDUCED) à XmlSchemaCollection . Utilisez la méthode Add avec un URI d'espace de noms pour charger des schémas. Des schémas XML, l'URI d'espace de noms standard est la propriété espace de noms cible du schéma.

Configuration requise

La liste suivante met en évidence le matériel recommandé, logiciel infrastructure réseau et service packs dont vous aurez besoin :
  • Microsoft Visual Studio .NET est installé sur un système d'exploitation Microsoft Windows compatible
Cet article suppose que vous êtes familiarisé avec les sujets suivants :
  • Visual Basic .NET
  • Base des normes XML
  • LES schémas XSD

Créer un schéma XSD

Collez le code suivant dans un nouveau fichier texte nommé C:\Books.xsd :
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:bookstore-schema" elementFormDefault="qualified" targetNamespace="urn:bookstore-schema">
	<xsd:element name="bookstore" type="bookstoreType" />
	<xsd:element name="comment" type="xsd:string" />
	<xsd:element name="author" type="authorName"/>
	<xsd:complexType name="authorName">
		<xsd:sequence>
			<xsd:element name="first-name" type="xsd:string" />
			<xsd:element name="last-name" type="xsd:string" />
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="bookstoreType">
		<xsd:sequence maxOccurs="unbounded">
			<xsd:element name="book" type="bookType" />
			<xsd:element ref="comment" minOccurs="0" />
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="bookType">
		<xsd:sequence>
			<xsd:element name="title" type="xsd:string" />
			<xsd:element ref="author" />
			<xsd:element name="price" type="xsd:decimal" />
		</xsd:sequence>
		<xsd:attribute name="genre" type="xsd:string" />
	</xsd:complexType>
	
</xsd:schema>
				

Créer une application .NET de Visual Basic

  1. Créer un nouveau Visual Basic .NET Windows application.
  2. Faites glisser Button1 à Form1. Collez le code suivant pour ajouter une variable membre privée à classe Form1 :
    Dim m_success As Boolean
    					
  3. Collez la procédure sub suivante pour créer un ValidationEventHandler qui génère des erreurs de validation de l'objet XMLValidatingReader :
    Public Sub ValidationEventHandle(ByVal sender As Object, ByVal args As ValidationEventArgs)
            m_success = False
            Console.WriteLine((ControlChars.CrLf & ControlChars.Tab & "Validation error: " & args.Message))
        End Sub 'ValidationEventHandle
    						
    Remarque : vous devez inclure un gestionnaire d'événements pour recevoir des informations sur les erreurs de validation de données type définition (DTD), le XML-Data (REDUCED) schéma et le schéma de langage (XSD) de définition schéma XML. Le gestionnaire d'événements reçoit un argument de type ValidationEventArgs qui contient des données relatives à cet événement.

    Le gestionnaire de rappel pouvez utiliser la propriété ValidationEventArgs.severity afin de garantir qu'un document d'instance XML est validé par rapport à un schéma. La propriété gravité permet vous permettra de distinguer plus facilement une erreur de validation ( gravité est égale à XmlSeverityType.Error ) qui indique une erreur irrécupérable et un contrôle avertissement ( gravité est égale à XmlSeverityType.Warning ) qui indique qu'aucune information de schéma est disponible.
  4. Collez le code suivant dans la procédure d'événement Button1_Click :
            Dim reader As XmlValidatingReader = Nothing
            Dim myschema As New XmlSchemaCollection()
    
            Try
                'Create the XML fragment to be parsed.
                Dim xmlFrag As String = "<author  xmlns='urn:bookstore-schema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>" & _
                                "<first-name>Herman</first-name>" & _
                               "<last-name>Melville</last-name>" & _
                             "</author>"
    
                'Create the XmlParserContext.
                Dim context As New XmlParserContext(Nothing, Nothing, "", XmlSpace.None)
               
                'Implement the reader. 
                reader = New XmlValidatingReader(xmlFrag, XmlNodeType.Element, context)
                'Add the schema.
                myschema.Add("urn:bookstore-schema", "Books.xsd")
    
                'Set the schema type and add the schema to the reader.
                reader.ValidationType = ValidationType.Schema
                reader.Schemas.Add(myschema)
    
                'Add the handler to raise the validation event.
                AddHandler reader.ValidationEventHandler, AddressOf Me.ValidationEventHandle
    
                While reader.Read
    
                End While
                Console.WriteLine("Completed validating xmlfragment")
    
            Catch XmlExp As XmlException
                Console.WriteLine(XmlExp.Message)
            Catch XmlSchExp As XmlSchemaException
                Console.WriteLine(XmlSchExp.Message)
            Catch GenExp As Exception
                Console.WriteLine(GenExp.Message)
            End Try
        End Sub
    					
  5. Lorsque le message suivant s'affiche dans la fenêtre de sortie, le fragment XML est un élément valide :
    Completed validating xmlfragment
    					
Remarque : l'objet XMLValidatingReader valide les déclarations de type et les éléments de niveau supérieur dans le schéma XML. Fragments XML, tels que les éléments sub, sont considérés comme local. Vous ne pouvez pas passer fragments XML aux XmlValidatingReader pour la validation directe à moins que vous déclarez les fragments XML comme des éléments de niveau supérieur et définissez la référence du niveau requis.

Références

Pour plus d'informations, cliquez sur les numéros ci-dessous pour afficher les articles correspondants dans la Base de connaissances Microsoft :
307379 Comment faire pour valider un document XML à l'aide de DTD, XDR ou XSD dans Visual C# .NET
313826 INFO : Présentation des schémas XML dans le .NET Framework
313651 INFO : programme de XML dans le .NET Framework
Pour plus d'informations, consultez MSDN suivant sites Web :
Espace de noms System.XML
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemxml.asp

Services Web XML
http://msdn.microsoft.com/xml

Propriétés

Numéro d'article: 317463 - Dernière mise à jour: mercredi 3 septembre 2003 - Version: 2.2
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual Basic .NET 2003 Initiation
  • Microsoft Visual Basic .NET 2002 Initiation
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0
Mots-clés : 
kbmt kbhowtomaster KB317463 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 317463
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com