merge -r 53370:58178
[mono.git] / mcs / class / Commons.Xml.Relaxng / Commons.Xml.Nvdl / NvdlXsdSupport.cs
1 using System;
2 using System.Collections;
3 using System.Collections.Specialized;
4 using System.Xml;
5 using System.Xml.Schema;
6
7 namespace Commons.Xml.Nvdl
8 {
9         public class NvdlXsdValidatorProvider : NvdlValidationProvider
10         {
11                 public override NvdlValidatorGenerator CreateGenerator (
12                         XmlReader reader, NvdlConfig config)
13                 {
14                         if (reader.NamespaceURI != XmlSchema.Namespace)
15                                 return null;
16                         ArrayList al = new ArrayList ();
17                         while (!reader.EOF) {
18                                 if (reader.NodeType != XmlNodeType.Element) {
19                                         reader.Read ();
20                                         continue;
21                                 }
22                                 reader.MoveToContent ();
23                                 XmlSchema xs = XmlSchema.Read (reader, null);
24                                 xs.Compile (null, config.XmlResolverInternal);
25                                 al.Add (xs);
26                                 reader.Read ();
27                         }
28                         return new NvdlXsdValidatorGenerator (al.ToArray (typeof (XmlSchema)) as XmlSchema []);
29                 }
30         }
31
32         internal class NvdlXsdValidatorGenerator : NvdlValidatorGenerator
33         {
34                 XmlSchema [] schemas;
35
36                 public NvdlXsdValidatorGenerator (XmlSchema [] schemas)
37                 {
38                         this.schemas = schemas;
39                 }
40
41                 public override XmlReader CreateValidator (XmlReader reader,
42                         XmlResolver resolver)
43                 {
44                         XmlValidatingReader xvr =
45                                 new XmlValidatingReader (reader);
46                         xvr.XmlResolver = resolver;
47                         foreach (XmlSchema schema in schemas)
48                                 xvr.Schemas.Add (schema);
49
50                         return xvr;
51                 }
52
53                 public override bool AddOption (string name, string arg)
54                 {
55                         return false;
56                 }
57         }
58 }