Export (0) Print
Expand All

XmlNode.CloneNode Method

When overridden in a derived class, creates a duplicate of the node.

[Visual Basic]
Public MustOverride Function CloneNode( _
   ByVal deep As Boolean _
) As XmlNode
[C#]
public abstract XmlNode CloneNode(
 bool deep
);
[C++]
public: virtual XmlNode* CloneNode(
 bool deep
) = 0;
[JScript]
public abstract function CloneNode(
   deep : Boolean
) : XmlNode;

Parameters

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

Return Value

The cloned node.

Exceptions

Exception Type Condition
InvalidOperationException Calling this method on a node type that cannot be cloned.

Remarks

This method serves as a copy constructor for nodes. The duplicate node has no parent (ParentNode returns a null reference (Nothing in Visual Basic)).

The following table describes the specific behavior for each XmlNodeType.

XmlNodeType CloneNode(true) CloneNode(false)
Attribute Clones the attribute node, including child nodes. Clones the attribute node, including child nodes.
CData Clones the CData node, including its data content. Clones the CData node, including its data content.
Comment Clones the comment node, including its text content. Clones the comment node, including its text content.
Document Clones the document node, including any child nodes. Clones the document node.
DocumentFragment Clones the document fragment node, including any child nodes. Clones the document fragment node.
DocumentType Clones the document type node. Clones the document type node.
Element Clones the element node, its attributes, and any child nodes. Clones the element node and its attributes, including any default attributes.
Entity Entity nodes cannot be cloned. Entity nodes cannot be cloned.
EntityReference Clones the entity reference node. The replacement text is not included. Clones the entity reference node. The replacement text is not included.
Notation Notation nodes cannot be cloned. Notation nodes cannot be cloned.
ProcessingInstruction Clones the processing instruction node, including its target and data. Clones the processing instruction node, including its target and data.
SignificantWhitespace Clones the significant white space node, including its data value. Clones the significant white space node, including its data value.
Text Clones the text node, including its data value. Clones the text node, including its data value.
Whitespace Clones the white space node, including its data value. Clones the white space node, including its data value.
XmlDeclaration Clones the XmlDeclaration node, including its data value. Clones the XmlDeclaration node, including its data value.
All other node types. These node types cannot be cloned. These node types cannot be cloned.

Example

[Visual Basic, C#, C++] The following example shows the difference between a deep and shallow clone.

[Visual Basic] 
Option Explicit
Option Strict

Imports System
Imports System.IO
Imports System.Xml

Public Class Sample
    
    Public Shared Sub Main()
        
        Dim doc As New XmlDocument()
        doc.LoadXml("<book ISBN='1-861001-57-5'>" & _
                    "<title>Pride And Prejudice</title>" & _
                    "<price>19.95</price>" & _
                    "</book>")
        
        Dim root As XmlNode = doc.FirstChild
        
        'Create a deep clone.  The cloned node 
        'includes the child nodes.
        Dim deep As XmlNode = root.CloneNode(True)
        Console.WriteLine(deep.OuterXml)
        
        'Create a shallow clone.  The cloned node does not 
        'include the child nodes, but does include its attribute.
        Dim shallow As XmlNode = root.CloneNode(False)
        Console.WriteLine(shallow.OuterXml)
    End Sub 'Main
End Class 'Sample

[C#] 
using System;
using System.IO;
using System.Xml;

public class Sample {

  public static void Main() {

    XmlDocument doc = new XmlDocument();
    doc.LoadXml("<book ISBN='1-861001-57-5'>" +
                "<title>Pride And Prejudice</title>" +
                "<price>19.95</price>" +
                "</book>");

    XmlNode root = doc.FirstChild;

    //Create a deep clone.  The cloned node 
    //includes the child nodes.
    XmlNode deep = root.CloneNode(true);
    Console.WriteLine(deep.OuterXml);

    //Create a shallow clone.  The cloned node does not 
    //include the child nodes, but does include its attribute.
    XmlNode shallow = root.CloneNode(false);
    Console.WriteLine(shallow.OuterXml);
  }
}

[C++] 
#using <mscorlib.dll>
#using <System.Xml.dll>
using namespace System;
using namespace System::IO;
using namespace System::Xml;

int main()
{
    XmlDocument* doc = new XmlDocument();
    doc->LoadXml(S"<book ISBN='1-861001-57-5'>" 
                 S"<title>Pride And Prejudice</title>" 
                 S"<price>19.95</price>" 
                 S"</book>");

    XmlNode* root = doc->FirstChild;

    //Create a deep clone.  The cloned node 
    //includes the child nodes.
    XmlNode* deep = root->CloneNode(true);
    Console::WriteLine(deep->OuterXml);

    //Create a shallow clone.  The cloned node does not 
    //include the child nodes, but does include its attribute.
    XmlNode* shallow = root->CloneNode(false);
    Console::WriteLine(shallow->OuterXml);
}

[JScript] No example is available for JScript. To view a Visual Basic, C#, or C++ example, click the Language Filter button Language Filter in the upper-left corner of the page.

Requirements

Platforms: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family, .NET Compact Framework

See Also

XmlNode Class | XmlNode Members | System.Xml Namespace

Show:
© 2014 Microsoft