Method: Nokogiri::XML::Node#dup
- Defined in:
- ext/nokogiri/xml_node.c
#dup(*args) ⇒ Object Also known as: clone
:call-seq:
dup → Nokogiri::XML::Node
dup(depth) → Nokogiri::XML::Node
dup(depth, new_parent_doc) → Nokogiri::XML::Node
Copy this node.
- Parameters
-
depth
0 is a shallow copy, 1 (the default) is a deep copy. -
new_parent_doc
The new node’s parent Document. Defaults to the this node’s document.
- Returns
-
The new Nokogiri::XML::Node
966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 |
# File 'ext/nokogiri/xml_node.c', line 966
static VALUE
duplicate_node(int argc, VALUE *argv, VALUE self)
{
VALUE r_level, r_new_parent_doc;
int level;
int n_args;
xmlDocPtr new_parent_doc;
xmlNodePtr node, dup;
Noko_Node_Get_Struct(self, xmlNode, node);
n_args = rb_scan_args(argc, argv, "02", &r_level, &r_new_parent_doc);
if (n_args < 1) {
r_level = INT2NUM((long)1);
}
level = (int)NUM2INT(r_level);
if (n_args < 2) {
new_parent_doc = node->doc;
} else {
new_parent_doc = noko_xml_document_unwrap(r_new_parent_doc);
}
dup = xmlDocCopyNode(node, new_parent_doc, level);
if (dup == NULL) { return Qnil; }
noko_xml_document_pin_node(dup);
return noko_xml_node_wrap(rb_obj_class(self), dup);
}
|