svn path=/branches/mono-1-1-9/mcs/; revision=51207
[mono.git] / mcs / class / System.XML / Mono.Xml.Schema / XsdValidatingReader.cs
index 8758b904fd9d1f7d02ba8d5a2c555707c89dbf88..4355366e729abcd798ee4662d23eec983cd670ad 100644 (file)
@@ -29,6 +29,9 @@
 //
 using System;
 using System.Collections;
+#if NET_2_0
+using System.Collections.Generic;
+#endif
 using System.Collections.Specialized;
 using System.IO;
 using System.Text;
@@ -192,7 +195,12 @@ namespace Mono.Xml.Schema
                        }
                }
 
-               IDictionary IXmlNamespaceResolver.GetNamespacesInScope (XmlNamespaceScope scope)
+#if NET_2_0
+               IDictionary<string, string> 
+#else
+               IDictionary
+#endif
+               IXmlNamespaceResolver.GetNamespacesInScope (XmlNamespaceScope scope)
                {
                        IXmlNamespaceResolver resolver = reader as IXmlNamespaceResolver;
                        if (resolver == null)
@@ -1484,16 +1492,20 @@ namespace Mono.Xml.Schema
                                        schemaLocation = XsDatatype.FromName ("token", XmlSchema.Namespace).Normalize (schemaLocation);
                                        tmp = schemaLocation.Split (XmlChar.WhitespaceChars);
                                } catch (Exception ex) {
-                                       HandleError ("Invalid schemaLocation attribute format.", ex, true);
+                                       if (schemas.Count == 0)
+                                               HandleError ("Invalid schemaLocation attribute format.", ex, true);
                                        tmp = new string [0];
                                }
                                if (tmp.Length % 2 != 0)
-                                       HandleError ("Invalid schemaLocation attribute format.");
+                                       if (schemas.Count == 0)
+                                               HandleError ("Invalid schemaLocation attribute format.");
                                for (int i = 0; i < tmp.Length; i += 2) {
                                        try {
                                                schema = ReadExternalSchema (tmp [i + 1]);
                                        } catch (Exception) { // FIXME: (wishlist) It is bad manner ;-(
-                                               HandleError ("Could not resolve schema location URI: " + tmp [i + 1], null, true);
+                                               if (!schemas.Contains (tmp [i]))
+                                                       HandleError (String.Format ("Could not resolve schema location URI: {0}",
+                                                               i + 1 < tmp.Length ? tmp [i + 1] : String.Empty), null, true);
                                                continue;
                                        }
                                        if (schema.TargetNamespace == null)
@@ -1514,7 +1526,8 @@ namespace Mono.Xml.Schema
                                try {
                                        schema = ReadExternalSchema (noNsSchemaLocation);
                                } catch (Exception) { // FIXME: (wishlist) It is bad manner ;-(
-                                       HandleError ("Could not resolve schema location URI: " + noNsSchemaLocation, null, true);
+                                       if (schemas.Count != 0)
+                                               HandleError ("Could not resolve schema location URI: " + noNsSchemaLocation, null, true);
                                }
                                if (schema != null && schema.TargetNamespace != null)
                                        HandleError ("Specified schema has different target namespace.");