[Mono-bugs] [Bug 474091] New: XmlWriter.WriteElementString()/WriteStartElement() behave differently than Microsoft implementation with null namespace parameter.

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Mon Feb 9 16:39:09 EST 2009


https://bugzilla.novell.com/show_bug.cgi?id=474091

User dmitchell at logos.com added comment
https://bugzilla.novell.com/show_bug.cgi?id=474091#c472634

           Summary: XmlWriter.WriteElementString()/WriteStartElement()
                    behave differently than Microsoft implementation with
                    null namespace parameter.
    Classification: Mono
           Product: Mono: Class Libraries
           Version: 2.2.x
          Platform: Macintosh
        OS/Version: Mac OS X 10.5
            Status: NEW
          Severity: Normal
          Priority: P5 - None
         Component: Sys.XML
        AssignedTo: atsushi at ximian.com
        ReportedBy: dmitchell at logos.com
         QAContact: mono-bugs at lists.ximian.com
                CC: dmitchell at logos.com
        Depends on: 472634
          Found By: ---


+++ This bug was initially created as a clone of Bug #472634 +++

User-Agent:       Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_5; en-us)
AppleWebKit/525.18 (KHTML, like Gecko) Version/3.1.2 Safari/525.20.1

In Microsoft's implementation of .NET, XmlWriter.WriteAttributeString() is more
liberal about what it accepts than Mono's implementation. For example this
code:

---

using System;
using System.IO;
using System.Xml;

namespace FunWithXmlAttributes
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            using (StringWriter writerString = new StringWriter())
            {
                using (XmlWriter writerXml = XmlWriter.Create(writerString, new
XmlWriterSettings { Indent = false,
                    CloseOutput = false, OmitXmlDeclaration = true }))
                {
                    writerXml.WriteStartElement("root");
                    writerXml.WriteAttributeString("xmlns", "abc", null,
"uri:abcnamespace");
                    writerXml.WriteElementString("abc", "def", null, "value");
                    writerXml.WriteEndElement();
                }

                Console.WriteLine(writerString.ToString());
            }
        }
    }
}

---

Runs without trouble under the Microsoft implementation, producing this output:

---

<root xmlns:abc="uri:abcnamespace"><abc:def>value</abc:def></root>

---

However, running the same code under Mono results in this exception:

---

Unhandled Exception: System.ArgumentException: Namespace URI must not be null
when prefix is not an empty string.
  at System.Xml.XmlTextWriter.WriteStartElement (System.String prefix,
System.String localName, System.String namespaceUri) [0x0030e] in
/private/tmp/monobuild/build/BUILD/mono-2.2/mcs/class/System.XML/System.Xml/XmlTextWriter2.cs:677 
  at System.Xml.XmlWriter.WriteElementString (System.String prefix,
System.String localName, System.String ns, System.String value) [0x00000] in
/private/tmp/monobuild/build/BUILD/mono-2.2/mcs/class/System.XML/System.Xml/XmlWriter.cs:291 
  at FunWithXmlAttributes.MainClass.Main (System.String[] args) [0x0004a] in
/Users/dmitchell/Projects/FunWithXmlAttributes/FunWithXmlAttributes/Main.cs:19 

---

The reason appears to be that Microsoft allows specifying a namespace prefix
without the actual namespace if the namespace has already been defined
elsewhere. Mono seems to require the namespace except in cases such as the
"xmlns" prefix.

This is a significant issue in my organization's codebase because there are
many times that we may know the prefix without actually knowing the namespace
itself.

Reproducible: Always

Steps to Reproduce:
1. Compile the code listed above. Make sure that System.Xml is referenced.
2. Run
Actual Results:  
Code crashes under Mono

Expected Results:  
The following should be output:

<root xmlns:abc="uri:abcnamespace"><abc:def>value</abc:def></root>

-- 
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.


More information about the mono-bugs mailing list