Fixed MoveToParent issues with the navigator and attributes.
[mono.git] / mcs / class / System.XML / System.Xml / XmlWriter.cs
index 31bb6d183f61fd4291b33081f95ee5a8c37d5e8a..c383cca6501b44753544854470674c8be457eb1c 100644 (file)
@@ -13,6 +13,13 @@ 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 () { }
@@ -43,22 +50,32 @@ namespace System.Xml
                        throw new NotImplementedException ();
                }
 
-               [MonoTODO]
                public void WriteAttributeString (string localName, string value)
                {
-                       throw new NotImplementedException ();
+                       WriteAttributeString ("", localName, "", value);
                }
 
-               [MonoTODO]
-               public void WriteAttributeString (string localName,     string ns, string value)
+               public void WriteAttributeString (string localName, string ns, string value)
                {
-                       throw new NotImplementedException ();
+                       WriteAttributeString ("", localName, ns, value);
                }
 
-               [MonoTODO]
                public void WriteAttributeString (string prefix, string localName, string ns, string value)
                {
-                       throw new NotImplementedException ();
+                       if ((prefix == "xmlns") || (localName == "xmlns"))
+                               ns = value;
+                       
+                       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);
@@ -117,10 +134,9 @@ namespace System.Xml
 
                public abstract void WriteRaw (char[] buffer, int index, int count);
 
-               [MonoTODO]
                public void WriteStartAttribute (string localName, string ns)
                {
-                       throw new NotImplementedException ();
+                       WriteStartAttribute ("", localName, ns);
                }
 
                public abstract void WriteStartAttribute (string prefix, string localName, string ns);
@@ -131,16 +147,18 @@ namespace System.Xml
 
                public void WriteStartElement (string localName)
                {
-                       WriteStartElement ("", localName, "");
+                       WriteStartElementInternal (null, localName, null);
                }
 
                public void WriteStartElement (string localName, string ns)
                {
-                       WriteStartElement ("", localName, ns);
+                       WriteStartElement (null, localName, ns);
                }
 
                public abstract void WriteStartElement (string prefix, string localName, string ns);
 
+               protected abstract void WriteStartElementInternal (string prefix, string localName, string ns);
+
                public abstract void WriteString (string text);
 
                public abstract void WriteSurrogateCharEntity (char lowChar, char highChar);