New test.
[mono.git] / mcs / class / Commons.Xml.Relaxng / Commons.Xml.Nvdl / NvdlXsdSupport.cs
old mode 100755 (executable)
new mode 100644 (file)
index bbbf303..f964f5c
@@ -15,9 +15,15 @@ namespace Commons.Xml.Nvdl
                                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 []);
                }
@@ -35,18 +41,35 @@ namespace Commons.Xml.Nvdl
                public override XmlReader CreateValidator (XmlReader reader,
                        XmlResolver resolver)
                {
+#if NET_2_0
+                       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);
+#else
                        XmlValidatingReader xvr =
                                new XmlValidatingReader (reader);
                        xvr.XmlResolver = resolver;
                        foreach (XmlSchema schema in schemas)
                                xvr.Schemas.Add (schema);
-
                        return xvr;
+#endif
                }
 
                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;
+               }
        }
 }