3c1f479b9d
Former-commit-id: 806294f5ded97629b74c85c09952f2a74fe182d9
67 lines
1.8 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|