X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FSystem.XML%2FSystem.Xml%2FXmlNamedNodeMap.cs;h=756b30d18b6e0206f0675580e57f21a7de408658;hb=f8abecbb7fc52d6d161dd3a9155437ca4440d72f;hp=408bf988efc58debc344916a0283edf1fbc7d234;hpb=f61a6104de6ce031268dfecaf9269f573baab747;p=mono.git diff --git a/mcs/class/System.XML/System.Xml/XmlNamedNodeMap.cs b/mcs/class/System.XML/System.Xml/XmlNamedNodeMap.cs index 408bf988efc..756b30d18b6 100644 --- a/mcs/class/System.XML/System.Xml/XmlNamedNodeMap.cs +++ b/mcs/class/System.XML/System.Xml/XmlNamedNodeMap.cs @@ -17,6 +17,7 @@ namespace System.Xml { XmlNode parent; ArrayList nodeList; + bool readOnly = false; internal XmlNamedNodeMap (XmlNode parent) { @@ -45,8 +46,8 @@ namespace System.Xml public virtual XmlNode GetNamedItem (string localName, string namespaceURI) { foreach (XmlNode node in nodeList) { - if ((node.Name == localName) - && (parent.NamespaceURI == namespaceURI)) + if ((node.LocalName == localName) + && (node.NamespaceURI == namespaceURI)) return node; } @@ -62,42 +63,52 @@ 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 == localName) - && (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) { - XmlNode replaced = null; - + return SetNamedItem(node, -1); + } + + internal XmlNode SetNamedItem (XmlNode node, int pos) + { + if (readOnly || (node.OwnerDocument != parent.OwnerDocument)) + throw new ArgumentException ("Cannot add to NodeMap."); + foreach (XmlNode x in nodeList) - if (x == node) - replaced = x; - - nodeList.Add (node); - return replaced; + if(x.LocalName == node.LocalName && x.NamespaceURI == node.NamespaceURI) { + nodeList.Remove (x); + nodeList.Add (node); + return x; + } + + if(pos < 0) + nodeList.Add (node); + else + nodeList.Insert(pos, node); + return null; } + + internal ArrayList Nodes { get { return nodeList; } } } }