2002-09-15 Duncan Mak <duncan@ximian.com>
[mono.git] / mcs / class / System.XML / System.Xml / XmlNamedNodeMap.cs
index c82343f085a35005232680dcdb7d589047be6e7f..4a92046fd9353fe89c6f1ba7a2dc0dd7945fb982 100644 (file)
@@ -17,7 +17,7 @@ namespace System.Xml
        {
                XmlNode parent;
                ArrayList nodeList;
-               bool readonly;
+               bool readOnly = false;
 
                internal XmlNamedNodeMap (XmlNode parent)
                {
@@ -31,7 +31,7 @@ namespace System.Xml
 
                public virtual IEnumerator GetEnumerator () 
                {
-                       return ArrayList.GetEnumerator ();
+                       return nodeList.GetEnumerator ();
                }
 
                public virtual XmlNode GetNamedItem (string name)
@@ -46,8 +46,8 @@ namespace System.Xml
                public virtual XmlNode GetNamedItem (string localName, string namespaceURI)
                {
                        foreach (XmlNode node in nodeList) {
-                               if ((node.Name == name)
-                                   && (parent.NamespaceURI == namespaceURI))
+                               if ((node.LocalName == localName)
+                                   && (node.NamespaceURI == namespaceURI))
                                        return node;
                        }
 
@@ -63,38 +63,44 @@ namespace System.Xml
                }
 
                public virtual XmlNode RemoveNamedItem (string name)
-               {
-                       XmlNode removed = null;
-
+               {                       
                        foreach (XmlNode node in nodeList)
                                if (node.Name == name) {
-                                       removed = node;
                                        nodeList.Remove (node);
+                                       return node;
                                }
                        
-                       return removed;
+                       return null;
                }
 
                public virtual XmlNode RemoveNamedItem (string localName, string namespaceURI)
                {
-                       XmlNode removed = null;
-
                        foreach (XmlNode node in nodeList)
-                               if ((node.Name == name)
-                                   && (parent.NamespaceURI == namespaceURI)) {
-                                       removed = node;
+                               if ((node.LocalName == localName)
+                                   && (node.NamespaceURI == namespaceURI)) {
                                        nodeList.Remove (node);
+                                       return node;
                                }
 
-                       return removed;
+                       return null;
                }
 
                public virtual XmlNode SetNamedItem (XmlNode node)
                {
-                       if (readonly || (node.OwnerDocument != parent.OwnerDocument))
+                       if (readOnly || (node.OwnerDocument != parent.OwnerDocument))
                                throw new ArgumentException ("Cannot add to NodeMap.");
+                                               
+                       foreach (XmlNode x in nodeList)
+                               if (x.Name == node.Name) {
+                                       nodeList.Remove (x);
+                                       nodeList.Add (node);
+                                       return x;
+                               }
+                       
                        nodeList.Add (node);
-                       return node;
+                       return null;
                }
+
+               internal ArrayList Nodes { get { return nodeList; } }
        }
 }