Jo Shields 3c1f479b9d Imported Upstream version 4.0.0~alpha1
Former-commit-id: 806294f5ded97629b74c85c09952f2a74fe182d9
2015-04-07 09:35:12 +01:00

67 lines
1.8 KiB
C#

using System;
using System.Collections;
using System.Collections.Specialized;
using System.Xml;
using System.Xml.Schema;
namespace Commons.Xml.Nvdl
{
public class NvdlXsdValidatorProvider : NvdlValidationProvider
{
public override NvdlValidatorGenerator CreateGenerator (
XmlReader reader, NvdlConfig config)
{
if (reader.NamespaceURI != XmlSchema.Namespace)
return null;
ArrayList al = new ArrayList ();
while (!reader.EOF) {
if (reader.NodeType != XmlNodeType.Element) {
reader.Read ();
continue;
}
reader.MoveToContent ();
XmlSchema xs = XmlSchema.Read (reader, null);
xs.Compile (null, config.XmlResolverInternal);
al.Add (xs);
reader.Read ();
}
return new NvdlXsdValidatorGenerator (al.ToArray (typeof (XmlSchema)) as XmlSchema []);
}
}
internal class NvdlXsdValidatorGenerator : NvdlValidatorGenerator
{
XmlSchema [] schemas;
public NvdlXsdValidatorGenerator (XmlSchema [] schemas)
{
this.schemas = schemas;
}
public override XmlReader CreateValidator (XmlReader reader,
XmlResolver resolver)
{
XmlReaderSettings s = new XmlReaderSettings ();
s.ValidationType = ValidationType.Schema;
// do not allow inline schema and schemaLocation.
s.ValidationFlags = XmlSchemaValidationFlags.ProcessIdentityConstraints;
s.XmlResolver = resolver;
foreach (XmlSchema schema in schemas)
s.Schemas.Add (schema);
return XmlReader.Create (reader, s);
}
public override bool AddOption (string name, string arg)
{
return false;
}
public override bool HandleError (Exception ex, XmlReader reader, string nvdlLocation)
{
if (ex is XmlSchemaException)
throw new NvdlInstanceValidationException (String.Format ("XML schema validation error occured as a part of NVDL validation."), ex, this, nvdlLocation);
return false;
}
}
}