using System;
using System.Collections;
+using System.IO;
using System.Xml.XPath;
namespace System.Xml
#region Constructors
- protected internal XmlNode(XmlDocument ownerDocument)
+ protected internal XmlNode (XmlDocument ownerDocument)
{
this.ownerDocument = ownerDocument;
}
public virtual XmlNodeList ChildNodes {
get {
- return new XmlNodeListChildren(LastLinkedChild);
+ return new XmlNodeListChildren(this);
}
}
set { throw new NotImplementedException (); }
}
- [MonoTODO]
+ [MonoTODO("Setter.")]
public virtual string InnerXml {
- get { throw new NotImplementedException (); }
+ get {
+ StringWriter sw = new StringWriter ();
+ XmlTextWriter xtw = new XmlTextWriter (sw);
+
+ WriteContentTo(xtw);
+
+ return sw.GetStringBuilder().ToString();
+ }
+
set { throw new NotImplementedException (); }
}
- [MonoTODO]
public virtual bool IsReadOnly {
- get { throw new NotImplementedException (); }
+ get { return false; }
}
[System.Runtime.CompilerServices.IndexerName("Item")]
set { }
}
- [MonoTODO]
public abstract string LocalName { get; }
- [MonoTODO]
public abstract string Name { get; }
[MonoTODO]
get { return null; }
}
- [MonoTODO]
public abstract XmlNodeType NodeType { get; }
[MonoTODO]
public virtual string OuterXml {
- get { throw new NotImplementedException (); }
+ get {
+ StringWriter sw = new StringWriter ();
+ XmlTextWriter xtw = new XmlTextWriter (sw);
+
+ WriteTo(xtw);
+
+ return sw.GetStringBuilder().ToString();
+ }
}
public virtual XmlDocument OwnerDocument {
get { return null; }
}
- [MonoTODO]
public virtual string Value {
- get { throw new NotImplementedException (); }
- set { throw new NotImplementedException (); }
+ get { return null; }
+ set { throw new InvalidOperationException ("This node does not have a value"); }
}
#endregion
public virtual XmlNode AppendChild (XmlNode newChild)
{
- if (NodeType == XmlNodeType.Document || NodeType == XmlNodeType.Element || NodeType == XmlNodeType.Attribute) {
- XmlLinkedNode newLinkedChild = (XmlLinkedNode)newChild;
+ if (NodeType == XmlNodeType.Document
+ || NodeType == XmlNodeType.Element
+ || NodeType == XmlNodeType.Attribute) {
+ XmlLinkedNode newLinkedChild = (XmlLinkedNode) newChild;
XmlLinkedNode lastLinkedChild = LastLinkedChild;
+
+ newLinkedChild.parentNode = this;
+
if (lastLinkedChild != null) {
newLinkedChild.NextLinkedSibling = lastLinkedChild.NextLinkedSibling;
lastLinkedChild.NextLinkedSibling = newLinkedChild;
} else
newLinkedChild.NextLinkedSibling = newLinkedChild;
+
LastLinkedChild = newLinkedChild;
+
return newChild;
} else
throw new InvalidOperationException();
throw new NotImplementedException ();
}
- [MonoTODO]
public IEnumerator GetEnumerator ()
{
- throw new NotImplementedException ();
+ return new XmlNodeListChildren(this).GetEnumerator();
}
[MonoTODO]
LastLinkedChild = null;
}
- [MonoTODO]
public virtual XmlNode RemoveChild (XmlNode oldChild)
{
- throw new NotImplementedException ();
+ if (NodeType == XmlNodeType.Document || NodeType == XmlNodeType.Element || NodeType == XmlNodeType.Attribute)
+ {
+ if (IsReadOnly)
+ throw new ArgumentException();
+
+ if (Object.ReferenceEquals(LastLinkedChild, LastLinkedChild.NextLinkedSibling) && Object.ReferenceEquals(LastLinkedChild, oldChild))
+ LastLinkedChild = null;
+ else {
+ XmlLinkedNode oldLinkedChild = (XmlLinkedNode)oldChild;
+ XmlLinkedNode beforeLinkedChild = LastLinkedChild;
+
+ while (!Object.ReferenceEquals(beforeLinkedChild.NextLinkedSibling, LastLinkedChild) && !Object.ReferenceEquals(beforeLinkedChild.NextLinkedSibling, oldLinkedChild))
+ beforeLinkedChild = beforeLinkedChild.NextLinkedSibling;
+
+ if (!Object.ReferenceEquals(beforeLinkedChild.NextLinkedSibling, oldLinkedChild))
+ throw new ArgumentException();
+
+ beforeLinkedChild.NextLinkedSibling = oldLinkedChild.NextLinkedSibling;
+ oldLinkedChild.NextLinkedSibling = null;
+ }
+
+ return oldChild;
+ }
+ else
+ throw new ArgumentException();
}
[MonoTODO]
throw new NotImplementedException ();
}
- [MonoTODO]
public abstract void WriteContentTo (XmlWriter w);
- [MonoTODO]
public abstract void WriteTo (XmlWriter w);
#endregion