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
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.