2009-04-21 5 views
2

Je développe une application Web VB dans .NET3.5 en utilisant Visual Studio 2008.Comment puis-je valider une chaîne de XML par rapport à un fichier de schéma XML

Je vais avoir du mal à valider certains XML sous forme de chaîne avant de l'ajouter à un formulaire HTML pour l'envoyer à un tiers. J'ai un fichier de schéma XML de la 3ème partie à valider et à ce stade, j'aimerais que l'application effectue la validation avant chaque publication. Après la recherche, j'ai trouvé des références à un XmlValidatingReader mais cela est obsolète et j'ai de la difficulté à trouver une autre façon de le faire.

Tous les bons exemples sont en C# - pour l'instant je suis coincé avec VB. C'est ce que j'ai jusqu'ici avec qui je cherche de l'aide!

Public Function ValidateXML(ByVal strXML As String) As Boolean 

    ' er how do I get the schema file into here? 
    Dim schema As XmlReader 

    Dim settings As XmlReaderSettings = New XmlReaderSettings() 
    settings.Schemas.Add("", schema) 
    settings.ValidationType = ValidationType.Schema 

    ' When I use LoadXML to get the string I can't use the settings object above to get the schema in?? 
    Dim document As XmlDocument = New XmlDocument() 
    document.LoadXml(strXML) 

    document.Validate(AddressOf ValidationEventHandler) 

End Function 

Private Sub ValidationEventHandler(ByVal sender As Object, ByVal e As ValidationEventArgs) 
    ' Gonna return false here but haven't got to it yet! Prob set a variable for use above 
End Sub 

Merci

Répondre

3

Voici un exemple: XmlSchemaValidator in VB.NET

MISE À JOUR - Essayez ceci:

Public Function ValidateXML(ByVal strXML As String) As Boolean 
    Dim xsdPath As String = "path to your xsd" 
    Dim schema As XmlReader = XmlReader.Create(xsdPath) 
    Dim document As XmlDocument = New XmlDocument() 
    document.LoadXml(strXML) 
    document.Schemas.Add("", schema) 
    document.Validate(AddressOf ValidationEventHandler) 
End Function 
+0

Salut Jose, c'était un exemple utile mais je l'avais vu auparavant. Je pense que le code utilise un schéma intégré pour le lien XML/ou schéma car il ne montre pas comment le schéma est ajouté, n'est-ce pas? Aussi, il utilise toujours le XmlValidatingReader obsolète –

+0

Donnez le code ci-dessus un essai. J'espère que cela fonctionne. –

+0

Je suis venu avec la même chose alors j'accepte votre réponse, acclamations –

1

C'est ce que je fini par aller avec

Public validationErrors As String = "" 

Public Function ValidPortalRequest(ByVal XMLPortalRequest As String) As Boolean 
    Try 
     Dim objSchemasColl As New System.Xml.Schema.XmlSchemaSet 
     objSchemasColl.Add("xxx", "xxx") 
     objSchemasColl.Add("xxx", "xxxd") 
     Dim xmlDocument As New XmlDocument 
     xmlDocument.LoadXml(XMLPortalRequest) 
     xmlDocument.Schemas.Add(objSchemasColl) 
     xmlDocument.Validate(AddressOf ValidationEventHandler) 
     If validationErrors = "" Then 
      Return True 
     Else 
      Return False 
     End If 
    Catch ex As Exception 
     Throw 
    End Try 
End Function 

Private Sub ValidationEventHandler(ByVal sender As Object, ByVal e As ValidationEventArgs) 
    validationErrors += e.Message & "<br />" 
End Sub 

Identique à celle de Jose sauf que j'ai ajouté 2 XSD en tant que SchemaSet plutôt que de les lire avec un XMLReader.

Questions connexes