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 Object, ByVal e As System.Xml.Schema.ValidationEventArgs)
XMLError += (e.Message & vbCrLf)
End Sub
Public Function LoadXMLData(ByVal XMLData As String, ByVal XSDSchema As String) As 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.Object, ByVal e As System.EventArgs) Handles MyBase.Load
LoadFile()
End Sub
Private Sub Validate_Click(ByVal sender As System.Object, ByVal e 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