diff options
Diffstat (limited to 'mcs/class/System.XML/System.Xml/XmlNamedNodeMap.cs')
-rw-r--r-- | mcs/class/System.XML/System.Xml/XmlNamedNodeMap.cs | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/mcs/class/System.XML/System.Xml/XmlNamedNodeMap.cs b/mcs/class/System.XML/System.Xml/XmlNamedNodeMap.cs new file mode 100644 index 00000000000..756b30d18b6 --- /dev/null +++ b/mcs/class/System.XML/System.Xml/XmlNamedNodeMap.cs @@ -0,0 +1,114 @@ +// +// System.Xml.XmlNamedNodeMap +// +// Author: +// Jason Diamond (jason@injektilo.org) +// Duncan Mak (duncan@ximian.com) +// +// (C) 2002 Jason Diamond http://injektilo.org/ +// + +using System; +using System.Collections; + +namespace System.Xml +{ + public class XmlNamedNodeMap : IEnumerable + { + XmlNode parent; + ArrayList nodeList; + bool readOnly = false; + + internal XmlNamedNodeMap (XmlNode parent) + { + this.parent = parent; + nodeList = new ArrayList (); + } + + public virtual int Count { + get { return nodeList.Count; } + } + + public virtual IEnumerator GetEnumerator () + { + return nodeList.GetEnumerator (); + } + + public virtual XmlNode GetNamedItem (string name) + { + foreach (XmlNode node in nodeList) { + if (node.Name == name) + return node; + } + return null; + } + + public virtual XmlNode GetNamedItem (string localName, string namespaceURI) + { + foreach (XmlNode node in nodeList) { + if ((node.LocalName == localName) + && (node.NamespaceURI == namespaceURI)) + return node; + } + + return null; + } + + public virtual XmlNode Item (int index) + { + if (index < 0 || index > nodeList.Count) + return null; + else + return (XmlNode) nodeList [index]; + } + + public virtual XmlNode RemoveNamedItem (string name) + { + foreach (XmlNode node in nodeList) + if (node.Name == name) { + nodeList.Remove (node); + return node; + } + + return null; + } + + public virtual XmlNode RemoveNamedItem (string localName, string namespaceURI) + { + foreach (XmlNode node in nodeList) + if ((node.LocalName == localName) + && (node.NamespaceURI == namespaceURI)) { + nodeList.Remove (node); + return node; + } + + return null; + } + + public virtual XmlNode SetNamedItem (XmlNode node) + { + 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.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; } } + } +} |