X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FSystem.XML%2FSystem.Xml%2FXmlDocumentFragment.cs;h=130c7ab2e54794a5c42cd0dba54172a9b427179b;hb=a085bb96357fc502f5701b1c5557352b6c55bb67;hp=1dbd74139eb7db86f03cbbb16debab358107dc10;hpb=227b56db7ac2ef653fe72e56d0a3147f8d5158d7;p=mono.git diff --git a/mcs/class/System.XML/System.Xml/XmlDocumentFragment.cs b/mcs/class/System.XML/System.Xml/XmlDocumentFragment.cs index 1dbd74139eb..130c7ab2e54 100644 --- a/mcs/class/System.XML/System.Xml/XmlDocumentFragment.cs +++ b/mcs/class/System.XML/System.Xml/XmlDocumentFragment.cs @@ -1,17 +1,124 @@ +// +// System.Xml.XmlDocumentFragment +// +// Author: +// Duncan Mak (duncan@ximian.com) +// Atsushi Enomoto (ginga@kit.hi-ho.ne.jp) +// +// (C), Ximian, Inc +// (C)2002 Atsushi Enomoto using System; +using System.IO; +using System.Text; namespace System.Xml { - /// - /// - /// - public class XmlDocumentFragment + public class XmlDocumentFragment : XmlNode { - // Private data members + #region Fields - // public properties + private XmlLinkedNode lastLinkedChild; + + #endregion + + #region Constructor + + protected internal XmlDocumentFragment (XmlDocument doc) + : base (doc) + { + } + #endregion + #region Properties + + [MonoTODO("Setter is as incomplete as that of XmlElement.InnerXml")] + public override string InnerXml { + set { + // Copied from XmlElement.InnerXml (in the meantime;-)) + foreach(XmlNode n in ChildNodes) + { + this.RemoveChild (n); + } + + // I hope there are any well-performance logic... + XmlNameTable nt = this.OwnerDocument.NameTable; + XmlNamespaceManager nsmgr = this.ConstructNamespaceManager (); + XmlParserContext ctx = new XmlParserContext (nt, nsmgr, XmlLang, this.XmlSpace); + XmlTextReader xmlReader = OwnerDocument.ReusableReader; + xmlReader.Initialize (String.Empty, ctx, new StringReader (value), XmlNodeType.Element); + + do { + XmlNode n = OwnerDocument.ReadNode (xmlReader); + if(n == null) break; + AppendChild (n); + } while (true); + } + get { + StringBuilder sb = new StringBuilder (); + foreach(XmlNode n in ChildNodes) + sb.Append (n.OuterXml); + return sb.ToString (); + } + } + + public override string LocalName { + get { return "#document-fragment"; } + } + + + public override string Name { + get { return "#document-fragment"; } + } + + public override XmlNodeType NodeType { + get { return XmlNodeType.DocumentFragment; } + } + + public override XmlDocument OwnerDocument { + get { return base.OwnerDocument; } + } + + public override XmlNode ParentNode { + get { return null; } // it's always null here. + } + + // It is really not a type of XmlLinkedNode, + // but I copied this way from XmlElement. I looks good. + internal override XmlLinkedNode LastLinkedChild + { + get { return lastLinkedChild; } + set { lastLinkedChild = value; } + } + #endregion + + #region Methods + public override XmlNode CloneNode (bool deep) + { + if (deep) { // clone document + child nodes + XmlNode node = FirstChild; + + while ((node != null) && (node.HasChildNodes)) { + AppendChild (node.NextSibling.CloneNode (false)); + node = node.NextSibling; + } + + return node; + } else + return new XmlDocumentFragment (OwnerDocument); + } + + public override void WriteContentTo (XmlWriter w) + { + foreach(XmlNode n in ChildNodes) + n.WriteContentTo (w); + } + + public override void WriteTo (XmlWriter w) + { + foreach(XmlNode n in ChildNodes) + n.WriteTo (w); + } - // Public Methods + #endregion } }