I mis-read the docs and implemented the method the wrong way.. ;-(
[mono.git] / mcs / class / System.XML / System.Xml / XmlNamedNodeMap.cs
1 //
2 // System.Xml.XmlNamedNodeMap
3 //
4 // Author:
5 //   Jason Diamond (jason@injektilo.org)
6 //   Duncan Mak  (duncan@ximian.com)
7 //
8 // (C) 2002 Jason Diamond  http://injektilo.org/
9 //
10
11 using System;
12 using System.Collections;
13
14 namespace System.Xml
15 {
16         public class XmlNamedNodeMap : IEnumerable
17         {
18                 XmlNode parent;
19                 ArrayList nodeList;
20
21                 internal XmlNamedNodeMap (XmlNode parent)
22                 {
23                         this.parent = parent;
24                         nodeList = new ArrayList ();
25                 }
26
27                 public virtual int Count {
28                         get { return nodeList.Count; }
29                 }
30
31                 public virtual IEnumerator GetEnumerator () 
32                 {
33                         return nodeList.GetEnumerator ();
34                 }
35
36                 public virtual XmlNode GetNamedItem (string name)
37                 {
38                         foreach (XmlNode node in nodeList) {
39                                 if (node.Name == name)
40                                         return node;
41                         }
42                         return null;
43                 }
44
45                 public virtual XmlNode GetNamedItem (string localName, string namespaceURI)
46                 {
47                         foreach (XmlNode node in nodeList) {
48                                 if ((node.Name == localName)
49                                     && (parent.NamespaceURI == namespaceURI))
50                                         return node;
51                         }
52
53                         return null;
54                 }
55                 
56                 public virtual XmlNode Item (int index)
57                 {
58                         if (index < 0 || index > nodeList.Count)
59                                 return null;
60                         else
61                                 return (XmlNode) nodeList [index];
62                 }
63
64                 public virtual XmlNode RemoveNamedItem (string name)
65                 {
66                         XmlNode removed = null;
67
68                         foreach (XmlNode node in nodeList)
69                                 if (node.Name == name) {
70                                         removed = node;
71                                         nodeList.Remove (node);
72                                 }
73                         
74                         return removed;
75                 }
76
77                 public virtual XmlNode RemoveNamedItem (string localName, string namespaceURI)
78                 {
79                         XmlNode removed = null;
80
81                         foreach (XmlNode node in nodeList)
82                                 if ((node.Name == localName)
83                                     && (parent.NamespaceURI == namespaceURI)) {
84                                         removed = node;
85                                         nodeList.Remove (node);
86                                 }
87
88                         return removed;
89                 }
90
91                 public virtual XmlNode SetNamedItem (XmlNode node)
92                 {
93                         XmlNode replaced = null;
94                         
95                         foreach (XmlNode x in nodeList)
96                                 if (x == node)
97                                         replaced = x;
98                                         
99                         nodeList.Add (node);
100                         return replaced;
101                 }
102         }
103 }