2 // System.Xml.XmlAttribute
5 // Jason Diamond (jason@injektilo.org)
7 // (C) 2002 Jason Diamond http://injektilo.org/
11 using System.Collections;
15 public class XmlElement : XmlLinkedNode
19 private XmlAttributeCollection attributes;
20 private XmlLinkedNode lastLinkedChild;
21 private string localName;
22 private string namespaceURI;
23 private string prefix;
29 protected internal XmlElement (
33 XmlDocument doc) : base (doc)
36 this.localName = localName;
37 this.namespaceURI = namespaceURI;
39 attributes = new XmlAttributeCollection (this);
46 public override XmlAttributeCollection Attributes {
47 get { return attributes; }
50 public virtual bool HasAttributes {
51 get { return attributes.Count > 0; }
54 [MonoTODO ("Setter.")]
55 public override string InnerText {
57 // Not sure why this is an override. Passing through for now.
58 return base.InnerText;
60 set { throw new NotImplementedException (); }
63 [MonoTODO ("Setter.")]
64 public override string InnerXml {
66 // Not sure why this is an override. Passing through for now.
69 set { throw new NotImplementedException (); }
74 get { throw new NotImplementedException (); }
76 set { throw new NotImplementedException (); }
79 internal override XmlLinkedNode LastLinkedChild {
80 get { return lastLinkedChild; }
82 set { lastLinkedChild = value; }
85 public override string LocalName {
86 get { return localName; }
89 public override string Name {
91 return prefix != String.Empty ? prefix + ":" + localName : localName;
95 public override string NamespaceURI {
96 get { return namespaceURI; }
100 public override XmlNode NextSibling {
102 return base.NextSibling;
106 public override XmlNodeType NodeType {
108 return XmlNodeType.Element;
113 public override XmlDocument OwnerDocument {
115 return base.OwnerDocument;
119 public override string Prefix {
120 get { return prefix; }
121 set { prefix = value; }
129 public override XmlNode CloneNode (bool deep)
131 XmlNode node = new XmlElement (prefix, localName, namespaceURI,
134 for (int i = 0; i < node.Attributes.Count; i++)
135 node.AppendChild (node.Attributes [i].CloneNode (false));
138 while ((node != null) && (node.HasChildNodes)) {
139 AppendChild (node.NextSibling.CloneNode (true));
140 node = node.NextSibling;
145 // Reminder: Also look into Default attributes.
151 public virtual string GetAttribute (string name)
153 XmlNode attributeNode = Attributes.GetNamedItem (name);
154 return attributeNode != null ? attributeNode.Value : String.Empty;
158 public virtual string GetAttribute (string localName, string namespaceURI)
160 XmlNode attributeNode = Attributes.GetNamedItem (localName, namespaceURI);
161 return attributeNode != null ? attributeNode.Value : String.Empty;
165 public virtual XmlAttribute GetAttributeNode (string name)
167 XmlNode attributeNode = Attributes.GetNamedItem (name);
168 return attributeNode != null ? attributeNode as XmlAttribute : null;
172 public virtual XmlAttribute GetAttributeNode (string localName, string namespaceURI)
174 XmlNode attributeNode = Attributes.GetNamedItem (localName, namespaceURI);
175 return attributeNode != null ? attributeNode as XmlAttribute : null;
178 public virtual XmlNodeList GetElementsByTagName (string name)
180 ArrayList nodeArrayList = new ArrayList ();
181 this.searchNodesRecursively (this, name, String.Empty, nodeArrayList);
182 return new XmlNodeArrayList (nodeArrayList);
185 private void searchNodesRecursively (XmlNode argNode, string argName, string argNamespaceURI,
186 ArrayList argArrayList)
188 XmlNodeList xmlNodeList = argNode.ChildNodes;
189 foreach (XmlNode node in xmlNodeList)
191 if (node.LocalName.Equals (argName) && node.NamespaceURI.Equals (argNamespaceURI))
192 argArrayList.Add (node);
194 this.searchNodesRecursively (node, argName, argNamespaceURI, argArrayList);
198 public virtual XmlNodeList GetElementsByTagName (string localName, string namespaceURI)
200 ArrayList nodeArrayList = new ArrayList ();
201 this.searchNodesRecursively (this, localName, namespaceURI, nodeArrayList);
202 return new XmlNodeArrayList (nodeArrayList);
206 public virtual bool HasAttribute (string name)
208 XmlNode attributeNode = Attributes.GetNamedItem (name);
209 return attributeNode != null;
213 public virtual bool HasAttribute (string localName, string namespaceURI)
215 throw new NotImplementedException ();
218 [MonoTODO ("Don't remove default attributes.")]
219 public override void RemoveAll ()
221 // Remove the child nodes.
224 // Remove all attributes.
225 attributes.RemoveAll ();
228 public virtual void RemoveAllAttributes ()
230 attributes.RemoveAll ();
234 public virtual void RemoveAttribute (string name)
236 throw new NotImplementedException ();
240 public virtual void RemoveAttribute (string localName, string namespaceURI)
242 throw new NotImplementedException ();
246 public virtual XmlNode RemoveAttributeAt (int i)
248 throw new NotImplementedException ();
252 public virtual XmlAttribute RemoveAttributeNode (XmlAttribute oldAttr)
254 throw new NotImplementedException ();
258 public virtual XmlAttribute RemoveAttributeNode (string localName, string namespaceURI)
260 throw new NotImplementedException ();
264 public virtual void SetAttribute (string name, string value)
266 XmlAttribute attribute = OwnerDocument.CreateAttribute (name);
267 attribute.SetParentNode (this);
268 attribute.Value = value;
269 Attributes.SetNamedItem (attribute);
273 public virtual string SetAttribute (string localName, string namespaceURI, string value)
275 throw new NotImplementedException ();
279 public virtual XmlAttribute SetAttributeNode (XmlAttribute newAttr)
281 newAttr.SetParentNode(this);
282 XmlNode oldAttr = Attributes.SetNamedItem(newAttr);
283 return oldAttr != null ? oldAttr as XmlAttribute : null;
287 public virtual XmlAttribute SetAttributeNode (string localName, string namespaceURI)
289 XmlDocument xmlDoc = this.OwnerDocument;
\r
290 XmlAttribute xmlAttribute = new XmlAttribute (String.Empty, localName, namespaceURI, xmlDoc);
\r
291 return this.attributes.Append (xmlAttribute);
294 public override void WriteContentTo (XmlWriter w)
296 foreach(XmlNode childNode in ChildNodes)
297 childNode.WriteTo(w);
300 public override void WriteTo (XmlWriter w)
302 w.WriteStartElement(Prefix, LocalName, NamespaceURI);
304 foreach(XmlNode attributeNode in Attributes)
305 attributeNode.WriteTo(w);