Accueil > > > XML VALIDATION PAR SCHÉMA (XSD)
XML VALIDATION PAR SCHÉMA (XSD)
Information sur la source
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
Historique
- 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.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Traitement des données d'un fichier ".XSD" en VB [ par epsitof ]
Bonjour à tous,Je passe cette annonce car j'ai besoin d'une très grande aide, elle est urgente.Voila, j'ai un travail à faire donné par mon employeur,
Help : lors de la validation XML je voudrais obtenir toutes les erreurs d'un seul coup [ par nad008 ]
Bonjour, Actuellement pour tester si mon fichier XML est valide par rapport à des schémas XSD j'utilise le code suivant, celui-ci à
XSD SCHEMA et XML SQL 2005 [ par Troyan ]
bonjour,j'utilise l'objet SQLXMLBulkload.4.0 pour importer mon xml dans une base SQL Server avec un schema XSD simple tout marche.mais j'aimerais pouv
construire un fichier xml [ par olivier_1968 ]
Bonsoir à tous,Je suis en train de travailler sur un projet qui me depasse un peu alors je me permet de demander un coup de main.Voila, je dois ecrire
XML+XSD vers HTML [ par eSoluce ]
Bonjour à tous,Je recherche désespérément un code source .NET VB pour pouvoir générer une pag html à partir d'un fichier XML et XSD.Quelqu'un peut-il
valider la structure d'un fichier xml à partir de son xsd correspondant [ par abouHafsa ]
Bonjour, je suis débutant en vb6 et je souhaiterais pouvoir valider un fichier xml en fonction de son fichier xsd et ensuite afficher un log des erre
Besoin d'aide je me lance dans le XML [ par zuddap ]
Salut a tous ! Voila je sait que on en reparle souvent mais j'ai testé plein de code trouvé ici et la mais impossible de mettre la main sur celui qu
Formatage XML [ par Duke49 ]
Salut, Je n'arrive pas a formater mon code XML lorsque je l'écrit. L'implémentation se fait sur une ligne ! Au lieu de: [code=vb]<LOGICIEL Version="
Besoin d'infos pour le XML et VB2008 [ par PatBlarg ]
Bonjour, je souhaite me lancer dans le XML avec VB2008 mais tout les tutoriels que je trouve sont soit incomplet ou soit pour VB2005 et lors du passag
Créer une macro dans word me permettant d'ouvrir un fichier xml [ par shuwby ]
Bonjour à tous, j'ai un document word et je cherche une macro qui me permette de créer un fichier xml que ma macro renseignera automatiquement ensui
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|