2 // System.Xml.XmlDocumentFragment
\r
5 // Duncan Mak (duncan@ximian.com)
\r
6 // Atsushi Enomoto (ginga@kit.hi-ho.ne.jp)
\r
9 // (C)2002 Atsushi Enomoto
\r
14 namespace System.Xml
\r
16 public class XmlDocumentFragment : XmlNode
\r
20 private XmlLinkedNode lastLinkedChild;
\r
26 protected internal XmlDocumentFragment (XmlDocument doc)
\r
34 [MonoTODO("Setter is as incomplete as that of XmlElement.InnerXml")]
\r
35 public override string InnerXml {
\r
37 // Copied from XmlElement.InnerXml (in the meantime;-))
\r
38 foreach(XmlNode n in ChildNodes)
\r
40 this.RemoveChild (n);
\r
43 // I hope there are any well-performance logic...
\r
44 XmlNameTable nt = this.OwnerDocument.NameTable;
\r
45 XmlNamespaceManager nsmgr = this.ConstructNamespaceManager ();
\r
46 XmlParserContext ctx = new XmlParserContext (nt, nsmgr, XmlLang, this.XmlSpace);
\r
47 XmlTextReader xmlReader = OwnerDocument.ReusableReader;
\r
48 xmlReader.Initialize (String.Empty, ctx, new StringReader (value), XmlNodeType.Element);
\r
51 XmlNode n = OwnerDocument.ReadNode (xmlReader);
\r
52 if(n == null) break;
\r
57 StringBuilder sb = new StringBuilder ();
\r
58 foreach(XmlNode n in ChildNodes)
\r
59 sb.Append (n.OuterXml);
\r
60 return sb.ToString ();
\r
64 public override string LocalName {
\r
65 get { return "#document-fragment"; }
\r
69 public override string Name {
\r
70 get { return "#document-fragment"; }
\r
73 public override XmlNodeType NodeType {
\r
74 get { return XmlNodeType.DocumentFragment; }
\r
77 public override XmlDocument OwnerDocument {
\r
78 get { return base.OwnerDocument; }
\r
81 public override XmlNode ParentNode {
\r
82 get { return null; } // it's always null here.
\r
85 // It is really not a type of XmlLinkedNode,
\r
86 // but I copied this way from XmlElement. I looks good.
\r
87 internal override XmlLinkedNode LastLinkedChild
\r
89 get { return lastLinkedChild; }
\r
90 set { lastLinkedChild = value; }
\r
95 public override XmlNode CloneNode (bool deep)
\r
97 if (deep) { // clone document + child nodes
\r
98 XmlNode node = FirstChild;
\r
100 while ((node != null) && (node.HasChildNodes)) {
\r
101 AppendChild (node.NextSibling.CloneNode (false));
\r
102 node = node.NextSibling;
\r
107 return new XmlDocumentFragment (OwnerDocument);
\r
110 public override void WriteContentTo (XmlWriter w)
\r
112 foreach(XmlNode n in ChildNodes)
\r
113 n.WriteContentTo (w);
\r
116 public override void WriteTo (XmlWriter w)
\r
118 foreach(XmlNode n in ChildNodes)
\r