Validate xml against multiple xsd (which are strings)



I'm looking for a way to validate a transformed xml against a bunch of xsd-files which are loaded from database. I got 15 xsd, 10 of them share the same namespace, e.g. namespace1, 5 got other namespaces, e.g. namespace2, namespace3 and so on.


Some of the 10 xsd-files include other from that group, some also import xsds from the group of 5.


I tried three different ways to validate and all don't work as expected.


I know, that I got a working xml out of my transformation, I checked that with another tool, so I changed that default-namespace from namespace1 to namespace1'. I expect to get any error saying namespace1 expected and found namespace1' or something like that but


either I get no error (examples 1+3) or


I get an error adding the second schema from namespace1 saying "Type 'namespace1:Type.MyType' is no simple type or hasn't been declared." (but it was declared in the previously added schema) (example 2).


example1:



foreach (DataRow dr in lstdrXSDs)
{
using (xsd = XmlReader.Create(new StringReader(dr.Field<string>("XSD_Content"))))
{
schemas.Add(dr.Field<string>("XSD_Namespace"), xsd);
}
}

XDocument xml = XDocument.Load(XmlReader.Create(new StringReader(sXML)));
xml.Validate(schemas, (o, e) =>
{
sErrors += e.Message + Environment.NewLine;
});


example2:



XmlValidatingReader vr = new XmlValidatingReader(XmlReader.Create(new StringReader(sXML)));


string sError = String.Empty;

foreach (DataRow dr in lstdrXSDs)
{
vr.Schemas.Add(dr.Field<string>"XSD_Namespace"), XmlReader.Create(new StringReader(dr.Field<string>("XSD_Content"))));
}

vr.ValidationType = ValidationType.Schema;

vr.ValidationEventHandler += new ValidationEventHandler(delegate(object sender, ValidationEventArgs args)
{
sError += args.Severity + "\t" + args.Message + "\n";
});

while(vr.Read());


example3:



XmlReaderSettings sett = new XmlReaderSettings();
string sError = String.Empty;

foreach (DataRow dr in lstdrXSDs)
{
sett.Schemas.Add(dr.Field<string>("XSD_Namespace"), XmlReader.Create(new StringReader(dr.Field<string>("XSD_Content"))));
}
sett.ValidationType = ValidationType.Schema;
sett.ValidationEventHandler += new ValidationEventHandler(delegate(object sender, ValidationEventArgs args)
{
sError += args.Severity + "\t" + args.Message + "\n";
});

XmlReader xml = XmlReader.Create(new StringReader(sXML));
while (xml.Read()) ;

No comments:

Post a Comment