begin process at 2008 07 06 18:38:13
1 205 719 membres
282 nouveaux aujourd'hui
14 119 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

XML VALIDATION PAR SCHÉMA (XSD)


Information sur la source

Catégorie :VB.NET Source .NET ( DotNet ) Classé sous : xml, schémas, xsd Niveau : Débutant Date de création : 28/08/2006 Date de mise à jour : 01/09/2006 15:06:39 Vu / téléchargé: 9 628 / 33 914

Note :
2 / 10 - par 1 personne
2,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note

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

  • ''' <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
''' <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
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

01 septembre 2006 15:06:39 :
Voilà une amélioration de la fonction validateXML pour l'entrée string, la solution est un peu moins tarabiscoté que celle utilisée dans le source. (J'ai laissé l'autre méthode dans le "case ValidationEntreeTypes.TEST") Notez le "XML_Settings.ConformanceLevel = ConformanceLevel.Auto" la validation du XpathNavigator détecte ainsi toute seulle s'i s'agit de valider un document XML entier ou un fragment de doc XML.
  • signaler à un administrateur
    Commentaire de eboulian le 18/12/2006 21:00:22

    Je cherche un programme qui permettrait à partir d'un fichier schéma (.XSD) de créer une seule table dans SQL Server. J'entends par une seule table que chaque élément (incluant tout attribut) du schéma correspondrait à un champ de la table.

    J'ai essayé XMLSpy mais, d'après ce que j'ai vu c'est qu'il crée plutôt un enregistrement par élément. Et puis c'est la même chose pour les attributs mais dans une autre table.

    D'après mes recherches, je n'ai pas trouvé ce que je voulais et je crois que je vais devoir faire un programme très personnalisé.

Ajouter un commentaire

Pub



Appels d'offres

WEB DESIGN
Budget : 1 000€
Plugin Dialer outlook
Budget : 2 000€
Travail graphique- ill...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS