Xml validation par schéma (xsd)

Soyez le premier à donner votre avis sur cette source.

Vue 17 461 fois - Téléchargée 34 150 fois

Description

J'ai trouvé un peu partout comment valider un document XML à partir du fichier physique.
J'avais besoin de le faire sans opération de lecture/écriture sur le disque mais à partir d'un "XMLdocument".
Voici donc le code qui permet de valider mon XML qu'il soit sur le disque ou à partir d'une variable string.

Source / Exemple :


''' <summary>
''' Valide les données XML d'un document par un schéma
''' </summary>
''' <param name="schemaURI">URI du schéma XSD</param>
''' <param name="DocString">URI ou String XML</param>
''' <param name="ValidationEntree">La source XML est elle un string xml ou l'uti d'un fichier XML</param>
''' <returns>valide (OUI/NON) </returns>
''' <remarks></remarks>
Public Function validateXML(ByVal schemaURI As String, ByVal DocString As String, Optional ByVal ValidationEntree As ValidationEntreeTypes = ValidationEntreeTypes.XML_URI) As Boolean
        m_Success = True

        strinLog = ""

        Select Case ValidationEntree
            Case ValidationEntreeTypes.XML_URI
                Try
                    Dim XML_Settings As New XmlReaderSettings
                    XML_Settings.Schemas.Add(Nothing, schemaURI)
                    XML_Settings.ValidationType = ValidationType.Schema
                    AddHandler XML_Settings.ValidationEventHandler, AddressOf ValidationCallBack
                    Dim URI_XMlreader As XmlReader = XmlReader.Create(DocString, XML_Settings)
                    While URI_XMlreader.Read()
                    End While
                Catch ex As Exception

                End Try
            Case ValidationEntreeTypes.XML_TEXT_XML_string

                Try
                    Dim XML_Settings As New XmlReaderSettings
                    XML_Settings.Schemas.Add(Nothing, schemaURI)
                    XML_Settings.ValidationType = ValidationType.Schema
                    XML_Settings.ConformanceLevel = ConformanceLevel.Auto

                    AddHandler XML_Settings.ValidationEventHandler, AddressOf ValidationCallBack

                    Dim XmlDoc As New XmlDocument
                    XmlDoc.LoadXml(DocString)
                    Dim navigator As XPath.XPathNavigator = XmlDoc.CreateNavigator()

                    Dim URI_XMlreader As XmlReader = XmlReader.Create(navigator.ReadSubtree(), XML_Settings)
                    While URI_XMlreader.Read()
                    End While
                    

                Catch ex As Exception
                    Return False
                End Try
            Case ValidationEntreeTypes.TEST
                Try
                    Dim settings As XmlReaderSettings = New XmlReaderSettings()
                    settings.Schemas.Add(Nothing, schemaURI)
                    settings.ValidationType = ValidationType.Schema
                    AddHandler settings.ValidationEventHandler, AddressOf ValidationCallBack
                    '_________________________________________________________
                    Dim xmldoc As New XmlDocument
                    xmldoc.Load(DocString)

                    Dim memStream As New MemoryStream()
                    xmldoc.Save(memStream)
                    memStream.Seek(0, SeekOrigin.Begin)
                    Dim reader As XmlReader = XmlReader.Create(memStream, settings)
                    '_________________________________________________________
                    Dim document As XmlDocument = New XmlDocument()
                    document.Load(reader)

                    Dim eventHandler As ValidationEventHandler = New ValidationEventHandler(AddressOf ValidationCallBack)
                    document.Validate(eventHandler)
                Catch ex As Exception

                End Try
        End Select

        Return m_Success

    End Function

Conclusion :


fichiers exemples :
annuaire.xml
BAD_annuaire.xml
SchemaAnnuaire.xsd

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Commenter la réponse de eboulian

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.