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.Validator
7 {
8 public class XmlValidator
9 {
10 // salvo lo stato della validazione
11 private bool _isValid = true;
12 private StringBuilder _stringBuilder = new StringBuilder();
13
14 //Propretà per fornire al chiamante il risultato della validazione
15 public string ValidationErrors
16 {
17 get
18 {
19 return _stringBuilder.ToString();
20 }
21 }
22
23 // Metodo che valida
24 public bool Validate(string xmlPath, string xsdPath,string targetNameSpace)
25 {
26 XmlTextReader reader = null;
27 XmlValidatingReader vReader = null;
28 XmlSchemaCollection myschema = new XmlSchemaCollection();
29 try
30 {
31 //Creo XML reader
32 reader = new XmlTextReader(xmlPath);
33 //Incapsulo XML reader dentro Validiting reader
34 vReader = new XmlValidatingReader(reader);
35 vReader.ValidationEventHandler
36 +=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 file
44 //Se ci fossero errori viene chiamato l'handler
45 while (vReader.Read()) {}
46 }
47 catch
48 {
49 _isValid=false;
50 }
51 finally
52 {
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 validazione
63 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 che ho fatto per testare i file xml... e
viene usata as is nella libreria di processing XML.
powered by IMHO 1.2