Validatore xml

Avevo la necessità, in un progetto 2005, di controllare se un documento xml generato in base ad uno schema, fosse well-formed, così, per non farlo direttamente su http://www.xmlforasp.net/SchemaValidator.aspx dove avevo trovato un validatore on-line, ho pensato di provare a fare qualcosa del genere in VB2005.

Ho creato così una classe il vb2005 ed ho notato che in effetti qualcosa è cambiato rispetto alla precedente versione, che qui ho commentato

Imports System.Xml
Public Class XMLImport
    
Public XMLError As String
    Private Sub 
XMLEvent(ByVal sender As ObjectByVal As System.Xml.Schema.ValidationEventArgs)
        XMLError += (e.Message & vbCrLf)
    
End Sub

    Public Function 
LoadXMLData(ByVal XMLData As StringByVal XSDSchema As StringAs Boolean
        
XMLError = String.Empty
        
'Crea il documento XML utilizzando il codice passato in XMLData
        
Dim MyXMLDocument As New System.Xml.XmlDocument
        
Dim MyXSDTextReader As New System.IO.StringReader(XSDSchema)
        
'crea lo schema con l'handler all'evento di validazione che mi interessa
        
Dim MyXMLSchema As System.Xml.Schema.XmlSchema = System.Xml.Schema.XmlSchema.Read      (MyXSDTextReader, New System.Xml.Schema.ValidationEventHandler(AddressOf XMLEvent))

        
Dim MyXMLTextReader As New System.IO.StringReader(XMLData)
        MyXMLDocument.Load(MyXMLTextReader)
        MyXMLDocument.Schemas.Add(MyXMLSchema)
        MyXMLDocument.Validate(
New System.Xml.Schema.ValidationEventHandler(AddressOf XMLEvent))

       
'Obsolete(framework 1.1): 
        'Dichiara l'XML Reader
        'Dim Myreader As XmlReader = XmlReader.Create(MyXMLTextReader)
        ''Myreader.Settings.ValidationType = ValidationType.Schema
        'Myreader.Settings.Schemas.Add(MyXMLSchema)
        'Dim MyXMLValidatingReader As New System.Xml.XmlValidatingReader(MyXMLTextReader)
        'MyXMLValidatingReader.Schemas.Add(String.Empty, XSDSchema)
        'MyXMLValidatingReader.ValidationType = System.Xml.ValidationType.Schema
        'MyXMLDocument.CreateDocumentFragment()
        'MyXMLSchema.SourceUri = XSDSchema

    
End Function

    Public Sub 
Dispose()
        
MyBase.Finalize()
    
End Sub
End Class

Per provarlo :

    Private Sub FormXmlValidator_Load(ByVal sender As System.ObjectByVal As System.EventArgs) Handles MyBase.Load
        LoadFile()
    
End Sub

    Private Sub 
Validate_Click(ByVal sender As System.ObjectByVal As System.EventArgs) Handles Validate.Click
        
'dichiaro la classe XmlImport
        
Dim Myreader As New XMLImport
        
'richiamo il metodo a cui passare i due parametri stringa precedentemente caricati in due textbox
        
Myreader.LoadXMLData(txtxml.Text, txtXsd.Text)
        
'controllo se il reader contiene errori di validazione
        
If Myreader.XMLError <> String.Empty Then
            
MessageBox.Show(Myreader.XMLError, "Importazione Xml", MessageBoxButtons.OK, MessageBoxIcon.Error)
        
Else
            
MessageBox.Show("Documento Xml Well-Formed", "Importazione Xml", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        
End If
    End Sub

    Public Sub 
LoadFile()

        
'legge il file xml
        
Dim MyfileXml As New System.IO.StreamReader("xsd\sidocup.xml", True)
        txtxml.Text = MyfileXml.ReadToEnd
        MyfileXml.
Close()

        
'legge il file xsd
        
Dim MyfileXsd As New System.IO.StreamReader("xsd\sidocup.xsd", True)
        txtXsd.Text = MyfileXsd.ReadToEnd
        MyfileXsd.
Close()

    
End Sub

Magari ha bisogno di essere perfezionato o forse ci sono altri metodi più veloci, ma per i miei scopi è andato più che bene.

Attendo critiche e insulti

powered by IMHO 1.3

posted @ martedì 30 maggio 2006 17:51

Print
«dicembre»
domlunmarmergiovensab
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234