2 // System.Xml.XmlNamedNodeMap
5 // Jason Diamond (jason@injektilo.org)
6 // Duncan Mak (duncan@ximian.com)
8 // (C) 2002 Jason Diamond http://injektilo.org/
12 using System.Collections;
16 public class XmlNamedNodeMap : IEnumerable
20 bool readOnly = false;
22 internal XmlNamedNodeMap (XmlNode parent)
25 nodeList = new ArrayList ();
28 public virtual int Count {
29 get { return nodeList.Count; }
32 public virtual IEnumerator GetEnumerator ()
34 return nodeList.GetEnumerator ();
37 public virtual XmlNode GetNamedItem (string name)
39 foreach (XmlNode node in nodeList) {
40 if (node.Name == name)
46 public virtual XmlNode GetNamedItem (string localName, string namespaceURI)
48 foreach (XmlNode node in nodeList) {
49 if ((node.LocalName == localName)
50 && (node.NamespaceURI == namespaceURI))
57 public virtual XmlNode Item (int index)
59 if (index < 0 || index > nodeList.Count)
62 return (XmlNode) nodeList [index];
65 public virtual XmlNode RemoveNamedItem (string name)
67 foreach (XmlNode node in nodeList)
68 if (node.Name == name) {
70 throw new InvalidOperationException ("Cannot remove. This node is read only: " + name);
71 nodeList.Remove (node);
77 public virtual XmlNode RemoveNamedItem (string localName, string namespaceURI)
79 foreach (XmlNode node in nodeList)
80 if ((node.LocalName == localName)
81 && (node.NamespaceURI == namespaceURI)) {
82 nodeList.Remove (node);
89 public virtual XmlNode SetNamedItem (XmlNode node)
91 return SetNamedItem(node, -1);
94 internal XmlNode SetNamedItem (XmlNode node, int pos)
96 if (readOnly || (node.OwnerDocument != parent.OwnerDocument))
97 throw new ArgumentException ("Cannot add to NodeMap.");
99 foreach (XmlNode x in nodeList)
100 if(x.LocalName == node.LocalName && x.NamespaceURI == node.NamespaceURI) {
109 nodeList.Insert(pos, node);
113 internal ArrayList Nodes { get { return nodeList; } }