Ma è possibile che non esiste un programma per validare
un file XML passandogli un XSD?
Cercando su internet ho trovato degli IDE per gestire XML, per scrivere XSD,
per XSLT, per testare le trasformate, per tutto, e fanno anche la validazione,
ma sono programmi da 20Mb, da installare, da comprare, e che fanno anche il
caffè in formato XML... ma non uno stupido programma che prende solo un file XML
e lo valida contro un XSD.
Allora me lo sono fatto io... con .NET è veramente facile...
1 using System;2 using System.Text;3 using System.Xml;4 using System.Xml.Schema;5 6 namespace Com.Piyosailing.Xml.Validator7 {8 public class XmlValidator9 {10 // salvo lo stato della validazione11 private bool _isValid = true;12 private StringBuilder _stringBuilder = new StringBuilder();13 14 //Propretà per fornire al chiamante il risultato della validazione15 public string ValidationErrors 16 {17 get 18 {19 return _stringBuilder.ToString();20 }21 }22 23 // Metodo che valida24 public bool Validate(string xmlPath, string xsdPath,string targetNameSpace) 25 {26 XmlTextReader reader = null;27 XmlValidatingReader vReader = null;28 XmlSchemaCollection myschema = new XmlSchemaCollection();29 try30 {31 //Creo XML reader32 reader = new XmlTextReader(xmlPath);33 //Incapsulo XML reader dentro Validiting reader34 vReader = new XmlValidatingReader(reader);35 vReader.ValidationEventHandler36 +=new ValidationEventHandler(vReader_ValidationEventHandler);37 38 myschema.Add(targetNameSpace, xsdPath);39 40 vReader.ValidationType = ValidationType.Schema;41 vReader.Schemas.Add(myschema);42 43 //Leggo il file44 //Se ci fossero errori viene chiamato l'handler45 while (vReader.Read()) {}46 }47 catch48 {49 _isValid=false;50 }51 finally52 {53 if(reader.ReadState!=ReadState.Closed)54 reader.Close();55 if(vReader.ReadState!=ReadState.Closed)56 vReader.Close();57 }58 59 return _isValid;60 }61 62 //Event Handler per cattuare tutti gli errori di validazione63 private void vReader_ValidationEventHandler(object sender, ValidationEventArgs e)64 {65 _isValid = false;66 _stringBuilder.AppendFormat("\r\nValidation Error: {0}", e.Message);67 }68 }69 }
Questa è solo la libreria che valida, l'ho estrapolata
dal programmino da linea di comando...