[Mono-dev] XmlWriter.WriteAttributeString incompatible with MS implementation

David Mitchell dmitchell at logos.com
Wed Feb 4 11:58:33 EST 2009


Currently, when I go to http://bugzilla.novell.com, I get a 504 error. When
that clears up, I'll be happy to file an official bug, but until then,
here's a snippet of 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.WriteAttributeString("abc", "def", null, "value");
					writerXml.WriteEndElement();
				}

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

On Windows (with the MS implementation), the output is this:

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

While in OSX, I get this exception:

Unhandled Exception: System.ArgumentException: Namespace URI must not be
null when prefix is not an empty string.
  at System.Xml.XmlTextWriter.WriteStartAttribute (System.String prefix,
System.String localName, System.String namespaceUri) [0x00272] in
/private/tmp/monobuild/build/BUILD/mono-2.2/mcs/class/System.XML/System.Xml/XmlTextWriter2.cs:886 
  at System.Xml.XmlWriter.WriteAttributeString (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:243 
  at FunWithXmlAttributes.MainClass.Main (System.String[] args) [0x0004a] in
/Users/dmitchell/Projects/FunWithXmlAttributes/FunWithXmlAttributes/Main.cs:18

Thanks,
--Dave


Atsushi Eno wrote:
> 
> Hello,
> 
> If you file a bug on our bugzilla, I might "fix" the implementation 
> difference, depending on the repro, without the patch you have.
> http://bugzilla.novell.com
> 
> Atsushi Eno
> 
> David Mitchell wrote:
>> I'm currently trying to port the back-end of a very large project over to
>> OSX
>> from Windows, and I've encountered a rather vexing incompatibility
>> between
>> Mono and Microsoft's implementation of .NET.
>> 
>> The documentation for XmlWriter.WriteAttributeString(string prefix,
>> string
>> localName, string ns, string value) seems to indicate that if a prefix is
>> provided and a namespace is not, that the method may throw an
>> ArgumentException, and this is what Mono does. However, Microsoft's
>> implementation allows this scenario if the given prefix has already been
>> associated with a namespace.
>> 
>> This wouldn't be a terribly big deal, except that the XmlWriter provides
>> no
>> way to determine the namespace associated with a prefix, and we have many
>> cases in which we only have a prefix to work with. Is there any chance of
>> getting this behavior modified to conform to Microsoft's implementation?
>> I'd
>> submit a patch myself, but as I was investigating this issue with a
>> coworker, he opened up the relevant classes in Reflector, so I'm
>> tainted...
>> 
>> Thanks,
>> --Dave
> 
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list
> 
> 

-- 
View this message in context: http://www.nabble.com/XmlWriter.WriteAttributeString-incompatible-with-MS-implementation-tp21815568p21834689.html
Sent from the Mono - Dev mailing list archive at Nabble.com.



More information about the Mono-devel-list mailing list