Description
Creates and returns a clone of the current PBDOM_CHARACTERDATA.
Syntax
pbdom_chardata_name.Clone(boolean bDeep)
|
Argument |
Description |
|---|---|
|
pbdom_chardata_name |
The name of a PBDOM_CHARACTERDATA. |
|
bDeep |
A boolean specifying whether a deep or shallow clone is returned. Values are true for a deep clone and false for a shallow clone. This argument is currently ignored. |
Return value
PBDOM_OBJECT.
Throws
EXCEPTION_PBDOM_OBJECT_INVALID_FOR_USE -- If this PBDOM_CHARACTERDATA is not a reference to an object derived from PBDOM_CHARACTERDATA.
Examples
This example creates a PBDOM_DOCUMENT based on the following DOM tree:
<abc> <data>Data</data> </abc>
The PowerScript code obtains the data element of the root element as a PBDM_ELEMENT and obtains an array of its children. The array has only one item, the PBDOM_TEXT containing the string "data":
PBDOM_BUILDER pbdombuilder_new
PBDOM_DOCUMENT pbdom_doc
PBDOM_ELEMENT pbdom_elem
PBDOM_CHARACTERDATA pbdom_chardata_1
PBDOM_CHARACTERDATA pbdom_chardata_2
PBDOM_CHARACTERDATA pbdom_chardata_3
PBDOM_OBJECT pbdom_obj_array[]
string strXML = "<abc><data>Data</data></abc>"
TRY
pbdombuilder_new = CREATE PBDOM_BUILDER
pbdom_doc = pbdombuilder_new.BuildFromString (strXML)
// get the data element, store in pbdom_elem,
// and get an array of its children
pbdom_elem = pbdom_doc.GetRootElement(). &
GetChildElement("data")
pbdom_elem.GetContent(pbdom_obj_array)This PBDOM_TEXT is assigned into a PBDOM_CHARACTERDATA object, pbdom_chardata_1. Calling GetObjectClassString on pbdom_chardata_1 returns the class name of the actual object contained within it, pbdom_text. Calling GetText on it returns the string Data:
pbdom_chardata_1 = pbdom_obj_array[1]
MessageBox ("Class", &
pbdom_chardata_1.GetObjectClassString())
MessageBox ("Text", pbdom_chardata_1.GetText())Calling Clone on pbdom_chardata_1 creates a new PBDOM_CHARACTERDATA object. However, because the actual object referenced by pbdom_chardata_1 is a PBDOM_TEXT, the clone is a PBDOM_TEXT object.
Calling GetObjectClassString and GetText on the clone have the same result as for pbdom_chardata_1. The clone and the original object are separate objects and a call to Equals returns false:
pbdom_chardata_2 = pbdom_chardata_1.Clone(TRUE)
MessageBox ("Class", &
pbdom_chardata_2.GetObjectClassString())
MessageBox ("Text", pbdom_chardata_2.GetText())
if (pbdom_chardata_1.Equals(pbdom_chardata_2)) then
MessageBox ("Equals", &
"pbdom_chardata_1 equals pbdom_chardata_2")
else
MessageBox ("Equals", &
"pbdom_chardata_1 NOT equals pbdom_chardata_2")
end ifHowever, a call to Equals returns true if the object being compared to pbdom_chardata_1 is a reference to pbdom_chardata_1:
pbdom_chardata_3 = pbdom_chardata_1
if (pbdom_chardata_1.Equals(pbdom_chardata_3)) then
MessageBox ("Equals", &
"pbdom_chardata_1 equals pbdom_chardata_3")
else
MessageBox ("Equals", &
"pbdom_chardata_1 NOT equals pbdom_chardata_3")
end if
DESTROY pbdombuilder_new
CATCH (PBDOM_Exception except)
MessageBox ("Exception Occurred", except.Text)
END TRYUsage
The Clone method creates a new PBDOM_CHARACTERDATA object which is a duplicate of, and a separate object from, the original. Calling Equals using these two objects returns false.
The clone of a PBDOM_CHARACTERDATA object is always identical to its original whether bDeep is true or false, because a PBDOM_CHARACTERDATA object contains no subtree of child PBDOM_OBJECTs.
A PBDOM_CHARACTERDATA clone has no parent, but it resides in the same PBDOM_DOCUMENT as its original, and if the original PBDOM_CHARACTERDATA is standalone, the clone is standalone.


