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.SetReaderContext (String.Empty, ctx);
\r
49 xmlReader.SetReaderFragment (new StringReader (value), XmlNodeType.Element);
\r
52 XmlNode n = OwnerDocument.ReadNode (xmlReader);
\r
53 if(n == null) break;
\r
58 StringBuilder sb = new StringBuilder ();
\r
59 foreach(XmlNode n in ChildNodes)
\r
60 sb.Append (n.OuterXml);
\r
61 return sb.ToString ();
\r
65 public override string LocalName {
\r
66 get { return "#document-fragment"; }
\r
70 public override string Name {
\r
71 get { return "#document-fragment"; }
\r
74 public override XmlNodeType NodeType {
\r
75 get { return XmlNodeType.DocumentFragment; }
\r
78 public override XmlDocument OwnerDocument {
\r
79 get { return base.OwnerDocument; }
\r
82 public override XmlNode ParentNode {
\r
83 get { return null; } // it's always null here.
\r
86 // It is really not a type of XmlLinkedNode,
\r
87 // but I copied this way from XmlElement. I looks good.
\r
88 internal override XmlLinkedNode LastLinkedChild
\r
90 get { return lastLinkedChild; }
\r
91 set { lastLinkedChild = value; }
\r
96 public override XmlNode CloneNode (bool deep)
\r
98 if (deep) { // clone document + child nodes
\r
99 XmlNode node = FirstChild;
\r
101 while ((node != null) && (node.HasChildNodes)) {
\r
102 AppendChild (node.NextSibling.CloneNode (false));
\r
103 node = node.NextSibling;
\r
108 return new XmlDocumentFragment (OwnerDocument);
\r
111 public override void WriteContentTo (XmlWriter w)
\r
113 foreach(XmlNode n in ChildNodes)
\r
114 n.WriteContentTo (w);
\r
117 public override void WriteTo (XmlWriter w)
\r
119 foreach(XmlNode n in ChildNodes)
\r