GetTextTrim

Description

The GetTextTrim method returns the textual content of the current PBDOM_CHARACTERDATA object with all surrounding whitespace characters removed.

Syntax

pbdom_chardata_name.GetTextTrim()

Argument

Description

pbdom_chardata_name

The name of a PBDOM_CHARACTERDATA


Return value

String.

DOM Object

Return Value

PBDOM_TEXT

The text data contained within the PBDOM_TEXT object itself with surrounding whitespace characters removed.

For example, suppose there is the following element:

<abc> MY    TEXT </abc>

If there is a PBDOM_TEXT object to represent the TEXT NODE "MY TEXT", then calling GetTextTrim on the PBDOM_TEXT returns the string MY TEXT.

PBDOM_CDATA

The string data that is contained within the CDATA section itself with surrounding whitespace characters removed. For example, suppose there is the following CDATA:

<![CDATA[   They're saying "x < y" & that "z > y" so 
I guess      that means that z > x ]]>

If there is a PBDOM_CDATA to represent the above CDATA section, then calling GetTextTrim on it returns the string:

They're saying " x < y " & that "z > y" so I 
guess      that means that z > x

Note that the initial spaces before "They're" and the trailing space after the last "x" are removed.

PBDOM_COMMENT

Suppose there is the following comment:

<!--   This   is   a   comment   -->

Calling GetTextTrim on this comment returns:

This   is   a   comment

Note that the spaces between the individual words in the comment are preserved. Only the surrounding whitespace characters are removed.


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

  1. Using an External DTD.

  2. Using a parameter entity.

  3. Using a single line statement to obtain the children PBDOM_OBJECTs of an element.

  4. Obtaining the text of the three separate types of PBDOM_CHARACTERDATA objects : PBDOM_TEXT, PBDOM_COMMENT, and PBDOM_CDATA.

  5. Obtaining the trimmed text of the same three separate types of PBDOM_CHARACTERDATA objects.

  6. The difference between the two types of text retrieved in 4 and 5.

The PowerScript code saves a string into an external file, then creates a PBDOM_DOCUMENT pbdom_doc based on the following DOM tree:

<!DOCTYPE abc SYSTEM "c:\external_entity.dtd">
<abc>
   <data>
       &text1;
       <!-- &text1;-->
       <![CDATA[&text1;]]>
   </data>
</abc>

c:\external_entity.dtd is an external Document Type Definition file. Its contents are the external subset of the Document Type Definition. The first line declares a PARAMETER entity param_entity_ref that contains the following replacement text:

&#32;&#32;&#32;PARAMETER ENTITY REFERENCE&#9;&#9;&#9;

The next line declares a general entity text1 that contains the following replacement text:

%param_entity_ref;

When the entity text1 is used in an XML document, it is expanded to the contents of the PARAMETER entity param_entity_ref.

The PowerScript code then obtains the root element, uses it to obtain the data child element, and then obtains an array of the child element's own children. PBDOM collects all the PBDOM_OBJECTs that are the children of data and stores them in the PBDOM_OBJECT array pbdom_obj_array.

Next, the FOR loop iterates through all the items in pbdom_obj_array and stores each item in the PBDOM_CHARACTERDATA array pbdom_chardata. This step is not required -- the pbdom_obj_array can be used to manipulate the data element's children. It is done to demonstrate that you can cast each item into a PBDOM_CHARACTERDATA object by assigning it into a PBDOM_CHARACTERDATA array.

This is possible if and only if each PBDOM_OBJECT is also derived from PBDOM_CHARACTERDATA. If a PBDOM_OBJECT is not derived from PBDOM_CHARACTERDATA, the PowerBuilder VM throws an exception.

The next FOR loop iterates through all the items of the pbdom_chardata array and calls the GetText and GetTextTrim methods on each. Each of the returned strings from GetText and GetTextTrim is delimited by "[" and "]" characters so that the complete text content displays clearly in the message boxes.

The first child of data is the PBDOM_TEXT &text1;, which expands to the string in param_entity_ref. The entity references within this string are also expanded and the Tab and Space characters display when GetText is called. When GetTextTrim is called, PBDOM removes the beginning and trailing whitespace characters and the resulting string is simply PARAMETER ENTITY REFERENCE.

The second child of data is the PBDOM_COMMENT <!-- &text1;-->., and the third child is the PBDOM_CDATA <![CDATA[&text1;]]>. The string &text1; is not considered to be an entity reference by PBDOM because W3C DOM comments and CDATA sections cannot hold any entity references. Both GetText and GetTextTrim return the string &text1;. There are no leading or trailing spaces to remove.

PBDOM_CHARACTERDATA      pbdom_chardata[]
PBDOM_OBJECT             pbdom_obj_array[]
integer                  iFileNum1
long                     l = 0
string strExternalDTD = "<!ENTITY % param_entity_ref ~"&#32;&#32;&#32;PARAMETER ENTITY REFERENCE&#9;&#9;&#9;~"><!ENTITY text1 ~"%param_entity_ref;~">"
string strXML = "<!DOCTYPE abc SYSTEM ~"c:\external_entity.dtd~"><abc><data>&text1;<!-- &text1;--><![CDATA[&text1;]]></data></abc>"

TRY
 iFileNum1 = FileOpen("c:\external_entity.dtd", &
   StreamMode!, Write!, LockWrite!, Replace!)
 FileWrite(iFileNum1, strExternalDTD)
 FileClose(iFileNum1)

 pbdombuilder_new = Create PBDOM_Builder
 pbdom_doc = pbdombuilder_new.BuildFromString (strXML)

 pbdom_doc.GetRootElement(). &
    GetChildElement("data"). &
    GetContent(pbdom_obj_array)

 for l = 1 to UpperBound(pbdom_obj_array)
    pbdom_chardata[l] = pbdom_obj_array[l]
 next 

 for l = 1 to UpperBound(pbdom_chardata)
    MessageBox (pbdom_chardata[l]. &
       GetObjectClassString() + " GetText()", &
       "[" + pbdom_chardata[l].GetText() + "]")
    MessageBox (pbdom_chardata[l]. &
       GetObjectClassString() + " GetTextTrim()" , &
       "[" + pbdom_chardata[l].GetTextTrim() + "]")
 next 

 Destroy pbdombuilder_new

CATCH (PBDOM_Exception except)
 MessageBox ("Exception Occurred", except.Text)
END TRY

Usage

If no textual value exists for the current PBDOM_CHARACTERDATA, or if only whitespace characters exist, an empty string is returned.

See also

GetText

GetTextNormalize

SetText