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