X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FSystem.XML%2FSystem.Xml%2FXmlNamedNodeMap.cs;h=756b30d18b6e0206f0675580e57f21a7de408658;hb=4477135bd8e477678d3ddaa4b508ff780b9e0a47;hp=04a6dfc14de16068980824975126a3b95372f3a0;hpb=f3ca9709a0ba4d6a02bbda35f3b1853064e7d423;p=mono.git diff --git a/mcs/class/System.XML/System.Xml/XmlNamedNodeMap.cs b/mcs/class/System.XML/System.Xml/XmlNamedNodeMap.cs index 04a6dfc14de..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,23 +63,21 @@ 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) { foreach (XmlNode node in nodeList) - if ((node.Name == localName) - && (parent.NamespaceURI == namespaceURI)) { + if ((node.LocalName == localName) + && (node.NamespaceURI == namespaceURI)) { nodeList.Remove (node); return node; } @@ -88,16 +87,28 @@ namespace System.Xml 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.Name == node.Name) { + if(x.LocalName == node.LocalName && x.NamespaceURI == node.NamespaceURI) { nodeList.Remove (x); - replaced = x; + nodeList.Add (node); + return x; } - nodeList.Add (node); - return replaced; + if(pos < 0) + nodeList.Add (node); + else + nodeList.Insert(pos, node); + return null; } + + internal ArrayList Nodes { get { return nodeList; } } } }