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
XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Je m'y prends un peu tard je sais, mais bon je suis développeur web et donc hyper fainéant ! Toujours dans le cadre des technologies émergentes, ici HTML5, parce qu'on aime HTML5 chez Wyg , nous seront présent, le vieux ( Aurélien V.) et moi, pour pr...
Cliquez pour lire la suite de l'article par Gio [WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|