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
13 using System.Xml.XPath;
\r
15 namespace System.Xml
\r
17 public class XmlDocumentFragment : XmlNode
\r
21 private XmlLinkedNode lastLinkedChild;
\r
27 protected internal XmlDocumentFragment (XmlDocument doc)
\r
36 [MonoTODO("Setter is as incomplete as that of XmlElement.InnerXml")]
\r
37 public override string InnerXml {
\r
39 // Copied from XmlElement.InnerXml (in the meantime;-))
\r
40 foreach(XmlNode n in ChildNodes)
\r
42 this.RemoveChild (n);
\r
45 // I hope there are any well-performance logic...
\r
46 XmlNamespaceManager nsmgr = this.ConstructNamespaceManager ();
\r
47 XmlParserContext ctx = new XmlParserContext (OwnerDocument.NameTable, nsmgr,
48 OwnerDocument.DocumentType != null ? OwnerDocument.DocumentType.DTD : null,
49 BaseURI, XmlLang, XmlSpace, null);
50 XmlTextReader xmlReader = new XmlTextReader (value, XmlNodeType.Element, ctx);
\r
51 xmlReader.XmlResolver = OwnerDocument.Resolver;
\r
54 XmlNode n = OwnerDocument.ReadNode (xmlReader);
\r
55 if(n == null) break;
\r
60 StringBuilder sb = new StringBuilder ();
\r
61 foreach(XmlNode n in ChildNodes)
\r
62 sb.Append (n.OuterXml);
\r
63 return sb.ToString ();
\r
67 public override string LocalName {
\r
68 get { return "#document-fragment"; }
\r
72 public override string Name {
\r
73 get { return "#document-fragment"; }
\r
76 public override XmlNodeType NodeType {
\r
77 get { return XmlNodeType.DocumentFragment; }
\r
80 public override XmlDocument OwnerDocument {
\r
81 get { return base.OwnerDocument; }
\r
84 public override XmlNode ParentNode {
\r
85 get { return null; } // it's always null here.
\r
88 // It is really not a type of XmlLinkedNode,
\r
89 // but I copied this way from XmlElement. It looks good.
\r
90 internal override XmlLinkedNode LastLinkedChild
\r
92 get { return lastLinkedChild; }
\r
93 set { lastLinkedChild = value; }
\r
96 internal override XPathNodeType XPathNodeType
\r
98 get { return XPathNodeType.Root; }
\r
103 public override XmlNode CloneNode (bool deep)
\r
105 if (deep) { // clone document + child nodes
\r
106 XmlNode node = FirstChild;
\r
108 while ((node != null) && (node.HasChildNodes)) {
\r
109 AppendChild (node.NextSibling.CloneNode (false));
\r
110 node = node.NextSibling;
\r
115 return new XmlDocumentFragment (OwnerDocument);
\r
118 public override void WriteContentTo (XmlWriter w)
\r
120 foreach(XmlNode n in ChildNodes)
\r
121 n.WriteContentTo (w);
\r
124 public override void WriteTo (XmlWriter w)
\r
126 foreach(XmlNode n in ChildNodes)
\r