2 // System.Xml.XmlTextWriter
5 // Kral Ferch <kral_ferch@hotmail.com>
14 public abstract class XmlWriter
18 protected WriteState ws = WriteState.Start;
19 protected XmlNamespaceManager namespaceManager = new XmlNamespaceManager (new NameTable ());
25 protected XmlWriter () { }
31 public abstract WriteState WriteState { get; }
33 public abstract string XmlLang { get; }
35 public abstract XmlSpace XmlSpace { get; }
41 public abstract void Close ();
43 public abstract void Flush ();
45 public abstract string LookupPrefix (string ns);
47 [MonoTODO("DTDs must be implemented to use 'defattr' parameter.")]
48 public virtual void WriteAttributes (XmlReader reader, bool defattr)
51 throw new ArgumentException("null XmlReader specified.", "reader");
53 switch(reader.NodeType)
55 case XmlNodeType.XmlDeclaration:
56 // this method doesn't write "<?xml " and "?>", at least MS .NET Framework as yet.
57 XmlDeclaration decl = new XmlDeclaration("1.0", String.Empty, String.Empty, null);
58 decl.Value = reader.Value;
59 if(decl.Version != null && decl.Version != String.Empty) WriteAttributeString("version", decl.Version);
60 if(decl.Encoding != null && decl.Encoding != String.Empty) WriteAttributeString("encoding", decl.Encoding);
61 if(decl.Standalone != null && decl.Standalone != String.Empty) WriteAttributeString("standalone", decl.Standalone);
63 case XmlNodeType.Element:
64 while (reader.MoveToNextAttribute ())
66 WriteAttributeString(reader.Prefix, reader.LocalName, reader.NamespaceURI, reader.Value);
69 case XmlNodeType.Attribute:
72 WriteAttributeString(reader.Prefix, reader.LocalName, reader.NamespaceURI, reader.Value);
74 while (reader.MoveToNextAttribute ()) ;
77 throw new XmlException("NodeType is not one of Element, Attribute, nor XmlDeclaration.");
81 public void WriteAttributeString (string localName, string value)
83 WriteAttributeString ("", localName, "", value);
86 public void WriteAttributeString (string localName, string ns, string value)
88 WriteAttributeString ("", localName, ns, value);
91 public void WriteAttributeString (string prefix, string localName, string ns, string value)
93 if ((prefix == "xmlns") || (localName == "xmlns"))
97 if (prefix == "xmlns" && namespaceManager.HasNamespace (localName))
100 /* Users need to be able to re-declare the default namespace for subnodes
101 else if (localName == "xmlns" && namespaceManager.HasNamespace (String.Empty))
106 WriteStartAttribute (prefix, localName, ns);
108 WriteEndAttribute ();
110 if ((prefix == "xmlns") || (localName == "xmlns"))
112 if (prefix == "xmlns")
113 namespaceManager.AddNamespace (localName, ns);
115 namespaceManager.AddNamespace ("", ns);
120 public abstract void WriteBase64 (byte[] buffer, int index, int count);
122 public abstract void WriteBinHex (byte[] buffer, int index, int count);
124 public abstract void WriteCData (string text);
126 public abstract void WriteCharEntity (char ch);
128 public abstract void WriteChars (char[] buffer, int index, int count);
130 public abstract void WriteComment (string text);
132 public abstract void WriteDocType (string name, string pubid, string sysid, string subset);
134 public void WriteElementString (string localName, string value)
136 WriteStartElement(localName);
141 public void WriteElementString (string localName, string ns, string value)
143 WriteStartElement(localName, ns);
148 public abstract void WriteEndAttribute ();
150 public abstract void WriteEndDocument ();
152 public abstract void WriteEndElement ();
154 public abstract void WriteEntityRef (string name);
156 public abstract void WriteFullEndElement ();
158 public abstract void WriteName (string name);
160 public abstract void WriteNmToken (string name);
163 public virtual void WriteNode (XmlReader reader, bool defattr)
165 throw new NotImplementedException ();
168 public abstract void WriteProcessingInstruction (string name, string text);
170 public abstract void WriteQualifiedName (string localName, string ns);
172 public abstract void WriteRaw (string data);
174 public abstract void WriteRaw (char[] buffer, int index, int count);
176 public void WriteStartAttribute (string localName, string ns)
178 WriteStartAttribute ("", localName, ns);
181 public abstract void WriteStartAttribute (string prefix, string localName, string ns);
183 public abstract void WriteStartDocument ();
185 public abstract void WriteStartDocument (bool standalone);
187 public void WriteStartElement (string localName)
189 WriteStartElement (String.Empty, localName, String.Empty);
192 public void WriteStartElement (string localName, string ns)
194 WriteStartElement (String.Empty, localName, ns);
197 public abstract void WriteStartElement (string prefix, string localName, string ns);
199 public abstract void WriteString (string text);
201 public abstract void WriteSurrogateCharEntity (char lowChar, char highChar);
203 public abstract void WriteWhitespace (string ws);