| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- //
- // System.Xml.XmlTextWriter
- //
- // Author:
- // Kral Ferch <[email protected]>
- //
- // (C) 2002 Kral Ferch
- //
- using System;
- namespace System.Xml
- {
- public abstract class XmlWriter
- {
- #region Fields
- protected WriteState ws = WriteState.Start;
- protected XmlNamespaceManager namespaceManager = new XmlNamespaceManager (new NameTable ());
- #endregion
- #region Constructors
- protected XmlWriter () { }
- #endregion
- #region Properties
- public abstract WriteState WriteState { get; }
-
- public abstract string XmlLang { get; }
- public abstract XmlSpace XmlSpace { get; }
- #endregion
- #region Methods
- public abstract void Close ();
- public abstract void Flush ();
- public abstract string LookupPrefix (string ns);
- [MonoTODO("DTDs must be implemented to use 'defattr' parameter.")]
- public virtual void WriteAttributes (XmlReader reader, bool defattr)
- {
- if(reader == null)
- throw new ArgumentException("null XmlReader specified.", "reader");
- switch(reader.NodeType)
- {
- case XmlNodeType.XmlDeclaration:
- // this method doesn't write "<?xml " and "?>", at least MS .NET Framework as yet.
- XmlDeclaration decl = new XmlDeclaration("1.0", String.Empty, String.Empty, null);
- decl.Value = reader.Value;
- if(decl.Version != null && decl.Version != String.Empty) WriteAttributeString("version", decl.Version);
- if(decl.Encoding != null && decl.Encoding != String.Empty) WriteAttributeString("encoding", decl.Encoding);
- if(decl.Standalone != null && decl.Standalone != String.Empty) WriteAttributeString("standalone", decl.Standalone);
- break;
- case XmlNodeType.Element:
- while (reader.MoveToNextAttribute ())
- {
- WriteAttributeString(reader.Prefix, reader.LocalName, reader.NamespaceURI, reader.Value);
- }
- break;
- case XmlNodeType.Attribute:
- do
- {
- WriteAttributeString(reader.Prefix, reader.LocalName, reader.NamespaceURI, reader.Value);
- }
- while (reader.MoveToNextAttribute ()) ;
- break;
- default:
- throw new XmlException("NodeType is not one of Element, Attribute, nor XmlDeclaration.");
- }
- }
- public void WriteAttributeString (string localName, string value)
- {
- WriteAttributeString ("", localName, "", value);
- }
- public void WriteAttributeString (string localName, string ns, string value)
- {
- WriteAttributeString ("", localName, ns, value);
- }
- public void WriteAttributeString (string prefix, string localName, string ns, string value)
- {
- if ((prefix == "xmlns") || (localName == "xmlns"))
- {
- ns = value;
-
- if (prefix == "xmlns" && namespaceManager.HasNamespace (localName))
- return;
-
- /* Users need to be able to re-declare the default namespace for subnodes
- else if (localName == "xmlns" && namespaceManager.HasNamespace (String.Empty))
- return;
- */
- }
-
- WriteStartAttribute (prefix, localName, ns);
- WriteString (value);
- WriteEndAttribute ();
- if ((prefix == "xmlns") || (localName == "xmlns"))
- {
- if (prefix == "xmlns")
- namespaceManager.AddNamespace (localName, ns);
- else
- namespaceManager.AddNamespace ("", ns);
- }
-
- }
- public abstract void WriteBase64 (byte[] buffer, int index, int count);
- public abstract void WriteBinHex (byte[] buffer, int index, int count);
- public abstract void WriteCData (string text);
- public abstract void WriteCharEntity (char ch);
- public abstract void WriteChars (char[] buffer, int index, int count);
- public abstract void WriteComment (string text);
- public abstract void WriteDocType (string name, string pubid, string sysid, string subset);
- public void WriteElementString (string localName, string value)
- {
- WriteStartElement(localName);
- WriteString(value);
- WriteEndElement();
- }
- public void WriteElementString (string localName, string ns, string value)
- {
- WriteStartElement(localName, ns);
- WriteString(value);
- WriteEndElement();
- }
- public abstract void WriteEndAttribute ();
- public abstract void WriteEndDocument ();
- public abstract void WriteEndElement ();
- public abstract void WriteEntityRef (string name);
- public abstract void WriteFullEndElement ();
- public abstract void WriteName (string name);
- public abstract void WriteNmToken (string name);
- [MonoTODO("needs to test")]
- public virtual void WriteNode (XmlReader reader, bool defattr)
- {
- if (reader == null)
- throw new ArgumentException ();
- if (reader.ReadState == ReadState.Initial) {
- while (reader.Read ())
- WriteNode (reader, defattr);
- }
- else {
- switch (reader.NodeType) {
- case XmlNodeType.Element:
- WriteStartElement (reader.Prefix, reader.LocalName, reader.NamespaceURI);
- WriteAttributes (reader, defattr);
- if (reader.IsEmptyElement)
- WriteEndElement ();
- break;
- case XmlNodeType.Attribute:
- break;
- case XmlNodeType.Text:
- WriteString (reader.Value);
- break;
- case XmlNodeType.CDATA:
- WriteCData (reader.Value);
- break;
- case XmlNodeType.EntityReference:
- WriteEntityRef (reader.Name);
- break;
- case XmlNodeType.ProcessingInstruction:
- WriteProcessingInstruction (reader.Name, reader.Value);
- break;
- case XmlNodeType.Comment:
- WriteComment (reader.Value);
- break;
- case XmlNodeType.DocumentType:
- WriteDocType (reader.Name,
- reader ["PUBLIC"], reader ["SYSTEM"], reader.Value);
- break;
- case XmlNodeType.SignificantWhitespace:
- goto case XmlNodeType.Whitespace;
- case XmlNodeType.Whitespace:
- WriteWhitespace (reader.Value);
- break;
- case XmlNodeType.EndElement:
- break;
- case XmlNodeType.EndEntity:
- break;
- case XmlNodeType.XmlDeclaration:
- WriteStartDocument (reader.GetAttribute ("standalone").ToLower () == "yes");
- break;
- default:
- throw new NotImplementedException ();
- }
- }
- }
- public abstract void WriteProcessingInstruction (string name, string text);
- public abstract void WriteQualifiedName (string localName, string ns);
- public abstract void WriteRaw (string data);
- public abstract void WriteRaw (char[] buffer, int index, int count);
- public void WriteStartAttribute (string localName, string ns)
- {
- WriteStartAttribute (null, localName, ns);
- }
- public abstract void WriteStartAttribute (string prefix, string localName, string ns);
- public abstract void WriteStartDocument ();
- public abstract void WriteStartDocument (bool standalone);
- public void WriteStartElement (string localName)
- {
- WriteStartElement (null, localName, null);
- }
- public void WriteStartElement (string localName, string ns)
- {
- WriteStartElement (null, localName, ns);
- }
- public abstract void WriteStartElement (string prefix, string localName, string ns);
- public abstract void WriteString (string text);
- public abstract void WriteSurrogateCharEntity (char lowChar, char highChar);
- public abstract void WriteWhitespace (string ws);
- #endregion
- }
- }
|