XmlAttribute.CloneNode(Boolean) Метод

Определение

Создает дубликат этого узла.

public:
 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

Параметры

deep
Boolean

Значение true для рекурсивного клонирования поддерева указанного узла; значение false для клонирования только самого узла.

Возвращаемое значение

Узел-дубликат.

Примеры

В следующем примере используется CloneNode для добавления атрибута в два разных узла элемента.

#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();
    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 = (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 = (XmlAttribute) attr.CloneNode(true);
    currNode = (XmlElement) doc.DocumentElement.LastChild;
    currNode.SetAttributeNode(attr2);

    Console.WriteLine("Display the modified XML...\r\n");
    XmlTextWriter writer = new XmlTextWriter(Console.Out);
    writer.Formatting = Formatting.Indented;
    doc.WriteContentTo(writer);
  }
}
Imports System.IO
Imports System.Xml

public class Sample

  public shared sub Main()

    Dim doc as XmlDocument = new XmlDocument()
    doc.Load("2elems.xml")
 
    '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) 
    currNode.SetAttributeNode(attr)

    '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) 
    currNode.SetAttributeNode(attr2)

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

  end sub
end class

В этом примере в качестве входных данных используется файл 2elems.xml.


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

Комментарии

Этот метод служит конструктором копирования для узлов. У клонированного узла нет родительского узла (ParentNode возвращает ).null

Клонирование неопределенного атрибута возвращает указанный атрибут (Specified возвращает true).

Применяется к

См. также раздел