[Mono-bugs] [Bug 463041] New: XElement.Add, XElement.Attribute, XElement. ToString bugs block use of VB XML literals
bugzilla_noreply at novell.com
bugzilla_noreply at novell.com
Wed Dec 31 01:11:58 EST 2008
https://bugzilla.novell.com/show_bug.cgi?id=463041
Summary: XElement.Add, XElement.Attribute, XElement.ToString bugs
block use of VB XML literals
Product: Mono: Class Libraries
Version: 1.9
Platform: x86
OS/Version: openSUSE 11.1
Status: NEW
Severity: Normal
Priority: P5 - None
Component: Sys.XML
AssignedTo: atsushi at ximian.com
ReportedBy: lu at wischik.com
QAContact: mono-bugs at lists.ximian.com
Found By: Community User
Description of Problem:
-------------------------
* XElement.Add(List<XAttribute>) throws NotImplementedException
* XElement.Add(IEnumerable) throws NotImplementedException
* XElement.Attribute(...) throws ArgumentNullException on absent attribute, but
should just return NULL
* XElement.ToString() gives incorrect output in presence of namespace
annotations
Significance:
---------------
VB has native syntax for "XML literals", which the compiler emits as calls to
functions in the System.Xml.Linq namespace. The user has no control over which
calls are emitted.
Mono has four bugs in its System.Xml.Linq implementation, where it differs from
the CLR behavior, and which make it basically impossible to use VB's XML
literals.
For ease in reproducing this bug, I've provided the C# equivalent of what VB
codegens. If the C# bugs are fixed, then VB's XML literals will now work
properly in Mono. Until then, VB's XML literals are basically unusable.
Steps to reproduce the problem:
Actual Results:
Expected Results:
---------------------
See code snippet at bottom of this report
How often does this happen?
------------------------------
Always. It is reproducible.
using System.Xml.Linq;
class Program
{
static void Main(string[] args)
{
// This syntax in VB:
// Dim x1 = <xml><%= New Uri("http://news.bbc.co.uk") %></xml>
// Emits this kind of code in C#:
var x1 = new XElement(XNamespace.Get("").GetName("xml"));
var x1a = new System.Collections.Generic.List<XAttribute>();
try { x1.Add(x1a); } catch (System.NotImplementedException) {
System.Console.WriteLine("ex1"); }
// MONO: prints "ex1"
// CLR: doesn't throw an exception, doesn't print anything
// This syntax in VB:
// Dim x2 = <xml><%= New XElement() {<item1></item1>} %></xml>
// Emits this kind of code in C#:
var x2 = new XElement(XNamespace.Get("").GetName("xml"));
var x2a = (System.Collections.IEnumerable)new XElement[] { };
try { x2.Add(x2a); } catch (System.NotImplementedException) {
System.Console.WriteLine("ex2"); }
// MONO: prints "ex2"
// CLR: doesn't throw an exception, doesn't print anything
// This syntax in VB:
// Dim x3 = <xml attr="hello"></xml>. at world
// Emits this kind of code in C#:
var x3 = new XElement(XNamespace.Get("").GetName("xml"));
var x3n = XNamespace.Get("").GetName("attr");
try { string s = (string)x3.Attribute(x3n); } catch
(System.ArgumentNullException) { System.Console.WriteLine("ex3"); }
// MONO: prints "ex3"
// CLR: doesn't throw an exception, doesn't print anything, returns
"null" for s
// This syntax in VB:
// Dim x4 = <xml><itunes:item></itunes:item></xml>
// Emits this kind of code in C#:
XElement x4 = new XElement(XNamespace.Get("").GetName("xml"));
XName x4ns =
XNamespace.Get("http://www.w3.org/2000/xmlns/").GetName("itunes");
XAttribute x4a = new XAttribute(x4ns,
"http://www.itunes.com/dtds/podcast-1.0.dtd");
x4a.AddAnnotation(XNamespace.Get("http://www.itunes.com/dtds/podcast-1.0.dtd"));
x4.Add(x4a);
XElement x4i = new
XElement(XNamespace.Get("http://www.itunes.com/dtds/podcast-1.0.dtd").GetName("item"));
x4.Add(x4i);
System.Console.WriteLine(x4);
// MONO: prints
<xml>{http://www.w3.org/2000/xmlns/}itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"<item
xmlns="http://www.itunes.com/dtds/podcast-1.0.dtd"></item></xml>
// CLR: prints <xml
xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"><itunes:item></itunes:item></xml>
}
}
--
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