XmlAttribute.CloneNode(Boolean) Method


Creates a duplicate of this node.

 override System::Xml::XmlNode ^ CloneNode(bool deep);
public override System.Xml.XmlNode CloneNode (bool deep);
override this.CloneNode : bool -> System.Xml.XmlNode
Public Overrides Function CloneNode (deep As Boolean) As XmlNode



true to recursively clone the subtree under the specified node; false to clone only the node itself


The duplicate node.


The following example uses CloneNode to add an attribute to two different element nodes.

#using <System.Xml.dll>

using namespace System;
using namespace System::IO;
using namespace System::Xml;
int main()
   //Create an XmlDocument.
   XmlDocument^ doc = gcnew XmlDocument;
   doc->Load( "2elems.xml" );
   //Create an attribute.
   XmlAttribute^ attr;
   attr = doc->CreateAttribute( "bk", "genre", "urn:samples" );
   attr->Value = "novel";
   //Add the attribute to the first book.
   XmlElement^ currNode = dynamic_cast<XmlElement^>(doc->DocumentElement->FirstChild);
   currNode->SetAttributeNode( attr );
   //An attribute cannot be added to two different elements.  
   //You must clone the attribute and add it to the second book.
   XmlAttribute^ attr2;
   attr2 = dynamic_cast<XmlAttribute^>(attr->CloneNode( true ));
   currNode = dynamic_cast<XmlElement^>(doc->DocumentElement->LastChild);
   currNode->SetAttributeNode( attr2 );
   Console::WriteLine( "Display the modified XML...\r\n" );
   XmlTextWriter^ writer = gcnew XmlTextWriter( Console::Out );
   writer->Formatting = Formatting::Indented;
   doc->WriteContentTo( writer );

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

public class Sample
  public static void Main()
    //Create an XmlDocument.
    XmlDocument doc = new XmlDocument();
    //Create an attribute.
    XmlAttribute attr;
    attr = doc.CreateAttribute("bk","genre","urn:samples");
    attr.Value = "novel";

    //Add the attribute to the first book.
    XmlElement currNode = (XmlElement) doc.DocumentElement.FirstChild;

    //An attribute cannot be added to two different elements.  
    //You must clone the attribute and add it to the second book.
    XmlAttribute attr2;
    attr2 = (XmlAttribute) attr.CloneNode(true);
    currNode = (XmlElement) doc.DocumentElement.LastChild;

    Console.WriteLine("Display the modified XML...\r\n");
    XmlTextWriter writer = new XmlTextWriter(Console.Out);
    writer.Formatting = Formatting.Indented;

Imports System.IO
Imports System.Xml

public class Sample

  public shared sub Main()

    Dim doc as XmlDocument = new XmlDocument()
    'Create an attribute.
    Dim attr as XmlAttribute 
    attr = doc.CreateAttribute("bk","genre","urn:samples")
    attr.Value = "novel"

    'Add the attribute to the first book.
    Dim currNode as XmlElement
    currNode = CType(doc.DocumentElement.FirstChild, XmlElement) 

    'An attribute cannot be added to two different elements.  
    'You must clone the attribute and add it to the second book.
    Dim attr2 as XmlAttribute 
    attr2 = CType (attr.CloneNode(true), XmlAttribute) 
    currNode = CType(doc.DocumentElement.LastChild, XmlElement) 

    Console.WriteLine("Display the modified XML...")
    Dim writer as XmlTextWriter = new XmlTextWriter(Console.Out)
    writer.Formatting = Formatting.Indented

  end sub
end class

The example uses the file, 2elems.xml, as input.

<!--sample XML fragment-->
  <book ISBN='10-861003-324'>
    <title>The Handmaid's Tale</title>
  <book ISBN='1-861001-57-5'>
    <title>Pride And Prejudice</title>


This method serves as a copy constructor for nodes. The cloned node has no parent (ParentNode returns null).

Cloning an unspecified attribute returns a specified attribute (Specified returns true).

Applies to

See also