Forráskód Böngészése

2004-09-07 Atsushi Enomoto <[email protected]>

	* XmlNamespaceManager.cs : Fixed GetNamespacesInScope() that returned
	  inconsistent namespace pairs.

svn path=/trunk/mcs/; revision=33515
Atsushi Eno 21 éve
szülő
commit
b7b3f27e64

+ 5 - 0
mcs/class/System.XML/System.Xml/ChangeLog

@@ -1,3 +1,8 @@
+2004-09-07  Atsushi Enomoto  <[email protected]>
+
+	* XmlNamespaceManager.cs : Fixed GetNamespacesInScope() that returned
+	  inconsistent namespace pairs.
+
 2004-09-07  Atsushi Enomoto  <[email protected]>
 
 	* XmlReader.cs, XmlTextReader.cs :

+ 21 - 4
mcs/class/System.XML/System.Xml/XmlNamespaceManager.cs

@@ -204,7 +204,6 @@ namespace System.Xml
 		}
 
 #if NET_2_0
-		[MonoTODO]
 		public virtual IDictionary GetNamespacesInScope (XmlNamespaceScope scope)
 #else
 		IDictionary IXmlNamespaceResolver.GetNamespacesInScope (XmlNamespaceScope scope)
@@ -216,9 +215,27 @@ namespace System.Xml
 #endif
 		{
 			Hashtable table = new Hashtable ();
-			int stop = (scope == XmlNamespaceScope.Local) ? declPos - count : 0;
-			for (int i = declPos; i > stop; i--)
-				table.Add (decls [i].Prefix, decls [i].Uri);
+
+			if (scope == XmlNamespaceScope.Local) {
+				for (int i = 0; i < count; i++)
+					if (decls [declPos - i].Prefix == String.Empty && decls [declPos - i].Uri == String.Empty) {
+						if (table.Contains (String.Empty))
+							table.Remove (String.Empty);
+					}
+					else if (decls [declPos - i].Uri != null)
+						table.Add (decls [declPos - i].Prefix, decls [declPos - i].Uri);
+				return table;
+			}
+
+			for (int i = 0; i < declPos + count; i++) {
+				if (decls [i].Prefix == String.Empty) {
+					if (table.Contains (String.Empty))
+						table.Remove (String.Empty);
+				}
+				else if (decls [i].Uri != null)
+					table [decls [i].Prefix] = decls [i].Uri;
+			}
+
 			if (scope == XmlNamespaceScope.All)
 				table.Add ("xml", XmlNamespaceManager.XmlnsXml);
 			return table;