[Mono-bugs] [Bug 560946] New: Moving an XmlAttribute from one XmlElement to another throws System.ArgumentException: This attribute is already set to another element.

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Fri Dec 4 14:21:26 EST 2009


http://bugzilla.novell.com/show_bug.cgi?id=560946

http://bugzilla.novell.com/show_bug.cgi?id=560946#c0


           Summary: Moving an XmlAttribute from one XmlElement to another
                    throws System.ArgumentException: This attribute is
                    already set to another element.
    Classification: Mono
           Product: Mono: Runtime
           Version: 2.4.x
          Platform: x86
        OS/Version: FreeBSD
            Status: NEW
          Severity: Normal
          Priority: P5 - None
         Component: JIT
        AssignedTo: lupus at novell.com
        ReportedBy: yvan at mabel.ca
         QAContact: mono-bugs at lists.ximian.com
          Found By: Community User
           Blocker: No


Description of Problem:
In the .NET runtime an XmlAttribute can be moved from one XmlElement to another
in the same XmlDocument by Appending it to the new XmlElement. It is
automatically removed from the source, since a node can only have on instance
in the document tree. In the Mono runtime this throws
"System.ArgumentException: This attribute is already set to another element.".

Steps to reproduce the problem:

Instantiate this class:
============================= snip =============================
using System.Xml;

/// <summary>
/// Demonstrates attribute bug in Mono.
/// </summary>
/// <remarks>
/// This does not cause an error in the .NET runtime. 
/// The attribute is moved from one element to another.
/// To reproduce the bug in Mono, instatiate this class.
/// </remarks>
public class AttributeBug
{
    public AttributeBug()
    {
        // make a document
        var xml = new XmlDocument();
        // add a root element
        var band = xml.CreateElement("band");
        xml.AppendChild(band);

        // give it an attribute
        var genre = xml.CreateAttribute("genre");
        xml.DocumentElement.Attributes.Append(genre);

        // make another node
        var musician = xml.CreateElement("musician");
        xml.DocumentElement.AppendChild(musician);

        /*
         *   // this doesn't make a difference FWIW
         *   band.Attributes.Remove(genre);   
         */

        // move the attribute
        // This line throws the exception.
        musician.Attributes.Append(genre);
    }
}
============================= snip =============================

Actual Results:
In the Mono runtime the exception is thrown with a stack trace like:

System.ArgumentException: This attribute is already set to another element.
  at System.Xml.XmlAttributeCollection.SetNamedItem (System.Xml.XmlNode node)
[0x00000] 
  at System.Xml.XmlAttributeCollection.Append (System.Xml.XmlAttribute node)
[0x00000] 
  at AttributeBug..ctor (System.Xml.XmlNode node) [0x00000] 

Expected Results:

The XmlAttribute node should move to the target element.

How often does this happen? 

Consistently.

Additional Information:
Removing the XmlAttribute from the source XmlElement first does not alter the
outcome.

Workarounds: None.

-- 
Configure bugmail: http://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