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
extraction data XML sous excel2000 [ par durandalus ]
Bonjour,Je voudrais faire une extraction de données d'un XML avec DTD sous excel 2000.Biensur avec du VBA sans à utiliser un parser xml ..je sais pas
selectSingleNode syntaxe [ par CharlEm ]
Bonjour,Je débute avec l'XML en VB6 donc ma question va surement vous sembler bien simple ... à moi non Récupérer une collection c'est ok mais récupér
Lire XML (petit problème parce que c'est du html en fait) [ par veler ]
Salut,Alors voila, il faudrait que je puisse lire un fichier HTML en VB.Net. J'utilise donc la lecture de XML puisque c'est à peu près la même chose.M
Ajout de données dans un fichier xml [ par Wag ]
Bonjour,J'ai 3 dataset qui pointent sur 3 base différentes (non liées), je souhaite ajouter le contenu de ces 3 datase dans un même fichier xml. Comme
Enregistrer un Datagrid sous forme de fichier XML [ par KIPRE74 ]
Bonjour à tous, j'ai un datagrid qui contient des valeurs. Je voudrais enregistrer le datagrid sous forme de fichier XML, mais je n'y arrive pas. Quel
|
Derniers Blogs
[WINDOWSPHONE7] LECTEUR DE FLUX RSS[WINDOWSPHONE7] LECTEUR DE FLUX RSS par Vko
Parce que j'aime pas tester à moitié, je me suis amusé à développer un petit lecteur de flux RSS avec un look qui vous rappellera surement quelque chose :) La RC de Visual Studio est plutôt molle mais fonctionne correctement. L'émulateur est pas...
Cliquez pour lire la suite de l'article par Vko [WP7] L'éMULATEUR WINDOWS PHONE 7 EST MULTITâCHE[WP7] L'éMULATEUR WINDOWS PHONE 7 EST MULTITâCHE par KooKiz
Une question qui reste en suspend concernant Windows Phone 7 est de savoir si le système permettra à plusieurs applications de s'exécuter simultanément, ou si un système de mise en pause similaire à celui de l'iPhone sera adopté. Même si cela ne perm...
Cliquez pour lire la suite de l'article par KooKiz PRéSENTATION CLUB MOSS CE JOUR "LA NOUVELLE ARCHITECTURE DE SERVICES SHAREPOINT 2010".PRéSENTATION CLUB MOSS CE JOUR "LA NOUVELLE ARCHITECTURE DE SERVICES SHAREPOINT 2010". par Patrick Guimonet
Ca y est la sortie RTM de SharePoint 2010 est annoncée pour le 16 avril 2010 (annonce faite ce jour par Erol Giraudy lors de la réunion du club MOSS). Vous pourrez trouver ici les slides de ma présentation du jour dans le cadre du club MOSS : 201...
Cliquez pour lire la suite de l'article par Patrick Guimonet [WINDOWPHONE7] PREMIERS PAS[WINDOWPHONE7] PREMIERS PAS par Vko
Hop voici les premiers pas avec les outils de développement pour Windows Phone 7. Premier changement suite à l'installation des outils : les type de projets pour la plateforme Windows Phone 7. Les projets se découpent en deux groupes : Les projet...
Cliquez pour lire la suite de l'article par Vko [WP7] LE SDK DE WINDOWS PHONE 7 EST DISPONIBLE ![WP7] LE SDK DE WINDOWS PHONE 7 EST DISPONIBLE ! par KooKiz
Comme le titre l'indique, une première CTP du kit de développement pour Windows Phone 7 est disponible. Basé sur Visual Studio 2010 Express, il propose de développer des applications pour WP7 en Silverlight ou XNA 4. Un émulateur est bien entendu de l...
Cliquez pour lire la suite de l'article par KooKiz
Logiciels
Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods Konvertor (4.00)KONVERTOR (4.00)Le logiciel est un gestionnaire multimedia affichant, jouant et convertissant plus de 2000 format... Cliquez pour télécharger Konvertor
|