Merge branch 'xml-fixes' of https://github.com/myeisha/mono into myeisha-xml-fixes
authorAtsushi Eno <atsushi@ximian.com>
Fri, 19 Nov 2010 03:28:01 +0000 (12:28 +0900)
committerAtsushi Eno <atsushi@ximian.com>
Fri, 19 Nov 2010 03:28:01 +0000 (12:28 +0900)
mcs/class/System.XML/Mono.Xml.Schema/XsdValidatingReader.cs
mcs/class/System.XML/Test/System.Xml.Schema/XmlSchemaValidatorTests.cs

index f6ae29c20da7cba7df7bfc9264cec8a1ee4931f2..8eea3d30a2aa07cfed6f729da274dd2dc59f5487 100644 (file)
@@ -1809,14 +1809,14 @@ namespace Mono.Xml.Schema
                                        MissingIDReferences.Remove (str);
                                break;
                        case XmlTokenizedType.IDREF:
-                               if (!idList.Contains (str))
+                               if (!idList.Contains (str) && !MissingIDReferences.Contains (str))
                                        MissingIDReferences.Add (str);
                                break;
                        case XmlTokenizedType.IDREFS:
                                string [] idrefs = (string []) parsedValue;
                                for (int i = 0; i < idrefs.Length; i++) {
                                        string id = idrefs [i];
-                                       if (!idList.Contains (id))
+                                       if (!idList.Contains (id) && !MissingIDReferences.Contains (str))
                                                MissingIDReferences.Add (id);
                                }
                                break;
index e58e24c359077077d5b0215f3ac8f418cc9c587a..9d5da5fc57a83b8dbd67b8b4f066c69e480cbaeb 100644 (file)
@@ -297,6 +297,37 @@ namespace MonoTests.System.Xml
                        Validate (File.ReadAllText ("Test/XmlFiles/xsd/584664a.xml"), File.ReadAllText ("Test/XmlFiles/xsd/584664a.xsd"));
                        Validate (File.ReadAllText ("Test/XmlFiles/xsd/584664b.xml"), File.ReadAllText ("Test/XmlFiles/xsd/584664b.xsd"));
                }
+
+               [Test]
+               public void MultipleMissingIds ()
+               {
+                       var schema = XmlSchema.Read (new StringReader (@"<?xml version=""1.0"" encoding=""utf-8""?>
+<xs:schema targetNamespace=""urn:multiple-ids"" elementFormDefault=""qualified"" xmlns=""urn:multiple-ids"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"">
+       <xs:element name=""root"">
+               <xs:complexType>
+                       <xs:sequence minOccurs=""0"" maxOccurs=""unbounded"">
+                               <xs:element name=""item"">
+                                       <xs:complexType>
+                                               <xs:attribute name=""id"" type=""xs:ID"" />
+                                               <xs:attribute name=""parent"" type=""xs:IDREF"" />
+                                       </xs:complexType>
+                               </xs:element>
+                       </xs:sequence>
+               </xs:complexType>
+       </xs:element>
+</xs:schema>"), null);
+                       var xml = @"<?xml version=""1.0"" encoding=""utf-8""?>
+<root xmlns=""urn:multiple-ids"">
+       <item id=""id2"" parent=""id1"" />
+       <item id=""id3"" parent=""id1"" />
+       <item id=""id1"" parent=""id1"" />
+</root>";
+                       var document = new XmlDocument ();
+                       document.LoadXml (xml);
+                       document.Schemas = new XmlSchemaSet ();
+                       document.Schemas.Add (schema);
+                       document.Validate (null);
+               }
        }
 }