-// -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-\r
//\r
// System.Xml.XmlDocumentFragment\r
//\r
// Author:\r
-// Daniel Weber (daniel-weber@austin.rr.com)\r
+// Duncan Mak (duncan@ximian.com)\r
+//\r
+// (C), Ximian, Inc\r
//\r
-// (C) 2001 Daniel Weber\r
using System;\r
+using System.Text;\r
\r
namespace System.Xml\r
{\r
- /// <summary>\r
- /// \r
- /// </summary>\r
public class XmlDocumentFragment : XmlNode\r
{\r
- // Private data members\r
-\r
- // public properties\r
- //===========================================================================\r
- /// <summary>\r
- /// Returns the local name of the node with. For document fragments, it returns "#document-fragment"\r
- /// </summary>\r
- public override string LocalName \r
+ #region Fields\r
+\r
+ private XmlLinkedNode lastLinkedChild;\r
+\r
+ #endregion\r
+\r
+ #region Constructor\r
+\r
+ protected internal XmlDocumentFragment (XmlDocument doc)\r
+ : base (doc)\r
{\r
- get\r
- {\r
- return "#document-fragment";\r
- }\r
}\r
+ \r
+ #endregion\r
+ #region Properties\r
\r
+ [MonoTODO("Setter is as incomplete as that of XmlElement.InnerXml")]\r
+ public override string InnerXml {\r
+ set {\r
+ // Copied from XmlElement.InnerXml (in the meantime;-))\r
+ foreach(XmlNode n in ChildNodes)\r
+ {\r
+ this.RemoveChild (n);\r
+ } \r
\r
- /// <summary>\r
- /// Get the node name. Document fragments return "#document-fragment".\r
- /// </summary>\r
- public override string Name \r
- { \r
- get\r
- {\r
- return "#document-fragment";\r
- }\r
- }\r
+ // How to get xml:lang and xml:space? Create logic as ConstructNamespaceManager()?\r
+ XmlNameTable nt = this.OwnerDocument.NameTable;\r
+ XmlNamespaceManager nsmgr = this.ConstructNamespaceManager (); //new XmlNamespaceManager(nt);\r
+ string lang = "";\r
+ XmlSpace space = XmlSpace.Default;\r
\r
- /// <summary>\r
- /// Overridden. Returns XmlNodeType.DocumentFragment.\r
- /// </summary>\r
- public override XmlNodeType NodeType \r
- {\r
- get\r
- {\r
- return XmlNodeType.DocumentFragment;\r
+ XmlParserContext ctx = new XmlParserContext (nt, nsmgr, lang, space);\r
+ XmlTextReader xmlReader = new XmlTextReader (value, this.NodeType, ctx);\r
+ this.ConstructDOM (xmlReader, this);\r
+ }\r
+ get {\r
+ StringBuilder sb = new StringBuilder ();\r
+ foreach(XmlNode n in ChildNodes)\r
+ sb.Append (n.OuterXml);\r
+ return sb.ToString ();\r
}\r
}\r
\r
- // Public Methods\r
- //===========================================================================\r
- /// <summary>\r
- /// Return a clone of the node\r
- /// </summary>\r
- /// <param name="deep">Make copy of all children</param>\r
- /// <returns>Cloned node</returns>\r
- public override XmlNode CloneNode( bool deep)\r
+ public override string LocalName {\r
+ get { return "#document-fragment"; }\r
+ }\r
+\r
+\r
+ public override string Name { \r
+ get { return "#document-fragment"; }\r
+ }\r
+\r
+ public override XmlNodeType NodeType {\r
+ get { return XmlNodeType.DocumentFragment; }\r
+ }\r
+\r
+ public override XmlDocument OwnerDocument {\r
+ get { return base.OwnerDocument; }\r
+ }\r
+\r
+ public override XmlNode ParentNode {\r
+ get { return null; } // it's always null here.\r
+ }\r
+\r
+ // It is really not a type of XmlLinkedNode,\r
+ // but I copied this way from XmlElement. I looks good.\r
+ internal override XmlLinkedNode LastLinkedChild\r
{\r
- // TODO - implement CloneNode()\r
- throw new NotImplementedException();\r
+ get { return lastLinkedChild; }\r
+ set { lastLinkedChild = value; }\r
}\r
+ #endregion\r
\r
- /// <summary>\r
- /// Saves all children of the current node to the passed writer\r
- /// </summary>\r
- /// <param name="w"></param>\r
- public override void WriteContentTo(XmlWriter w)\r
+ #region Methods \r
+ public override XmlNode CloneNode (bool deep)\r
{\r
- // TODO - implement WriteContentsTo(XmlWriter)\r
- throw new NotImplementedException();\r
+ if (deep) { // clone document + child nodes\r
+ XmlNode node = FirstChild;\r
+\r
+ while ((node != null) && (node.HasChildNodes)) {\r
+ AppendChild (node.NextSibling.CloneNode (false));\r
+ node = node.NextSibling;\r
+ }\r
+\r
+ return node;\r
+ } else\r
+ return new XmlDocumentFragment (OwnerDocument);\r
}\r
\r
- /// <summary>\r
- /// Saves the current node to writer w\r
- /// </summary>\r
- /// <param name="w"></param>\r
- public override void WriteTo(XmlWriter w)\r
+ public override void WriteContentTo (XmlWriter w)\r
{\r
- // TODO - implement WriteTo(XmlWriter)\r
- throw new NotImplementedException();\r
+ foreach(XmlNode n in ChildNodes)\r
+ n.WriteContentTo (w);\r
}\r
\r
- // Constructors\r
- //===========================================================================\r
- internal XmlDocumentFragment ( XmlDocument aOwner ) : base (aOwner)\r
+ public override void WriteTo (XmlWriter w)\r
{\r
+ foreach(XmlNode n in ChildNodes)\r
+ n.WriteTo (w);\r
}\r
\r
+ #endregion\r
}\r
}\r