2002-12-21 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
[mono.git] / mcs / class / System.XML / System.Xml / XmlDocumentFragment.cs
index d2ca03c141de8a1e227fbbe368f80c520ca05c4b..937af0efbfaa26e9496dc8c031f928e50994459f 100644 (file)
@@ -3,18 +3,21 @@
 //\r
 // Author:\r
 //   Duncan Mak  (duncan@ximian.com)\r
+//   Atsushi Enomoto  (ginga@kit.hi-ho.ne.jp)\r
 //\r
 // (C), Ximian, Inc\r
-//\r
+// (C)2002 Atsushi Enomoto\r
 using System;\r
+using System.IO;\r
+using System.Text;\r
 \r
 namespace System.Xml\r
 {\r
        public class XmlDocumentFragment : XmlNode\r
        {\r
                #region Fields\r
-
-               private XmlLinkedNode lastLinkedChild;
+\r
+               private XmlLinkedNode lastLinkedChild;\r
 \r
                #endregion\r
 \r
@@ -28,10 +31,30 @@ namespace System.Xml
                #endregion\r
                #region Properties\r
 \r
-               [MonoTODO]\r
+               [MonoTODO("Setter is as incomplete as that of XmlElement.InnerXml")]\r
                public override string InnerXml {\r
-                       set { throw new NotImplementedException (); }\r
-                       get { throw new NotImplementedException (); }\r
+                       set {\r
+                               // Copied from XmlElement.InnerXml (in the meantime;-))\r
+                               foreach(XmlNode n in ChildNodes)\r
+                               {\r
+                                       this.RemoveChild (n);\r
+                               }                 \r
+\r
+                               // I hope there are any well-performance logic...\r
+                               XmlNameTable nt = this.OwnerDocument.NameTable;\r
+                               XmlNamespaceManager nsmgr = this.ConstructNamespaceManager ();\r
+                               XmlParserContext ctx = new XmlParserContext (nt, nsmgr, XmlLang, this.XmlSpace);\r
+                               XmlTextReader xmlReader = OwnerDocument.ReusableReader;\r
+                               xmlReader.SetReaderContext (String.Empty, ctx);\r
+                               xmlReader.SetReaderFragment (new StringReader (value), XmlNodeType.Element);\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 override string LocalName {\r
@@ -55,11 +78,12 @@ namespace System.Xml
                        get { return null; } // it's always null here.\r
                }\r
 \r
-               // copied this way from XmlElement\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
-                       get { return lastLinkedChild; }
-                       set { lastLinkedChild = value; }
+                       get { return lastLinkedChild; }\r
+                       set { lastLinkedChild = value; }\r
                }\r
                #endregion\r
 \r
@@ -79,16 +103,16 @@ namespace System.Xml
                                return new XmlDocumentFragment (OwnerDocument);\r
                }\r
 \r
-               [MonoTODO]\r
                public override void WriteContentTo (XmlWriter w)\r
                {\r
-                       throw new NotImplementedException ();\r
+                       foreach(XmlNode n in ChildNodes)\r
+                               n.WriteContentTo (w);\r
                }\r
 \r
-               [MonoTODO]\r
                public override void WriteTo (XmlWriter w)\r
                {\r
-                       throw new NotImplementedException ();\r
+                       foreach(XmlNode n in ChildNodes)\r
+                               n.WriteTo (w);\r
                }\r
 \r
                #endregion\r