Listing 1: Saved XML Data

<?xml version="1.0" encoding="UTF-16LE" &
standalone="no"?>
<CUSTOMERS>
<CUSTOMER ID="101">
<FIRSTNAME>Michaels</FIRSTNAME>
<LASTNAME>Devlin</LASTNAME>
<ADDRESS>3114 Pioneer
Avenue</ADDRESS>
<CITY>Rutherford</CITY>
<STATE>NJ</STATE>
<ZIP>07070</ZIP> <PHONE>2015558966</PHONE>
<COMPANY>The Power Group</COMPANY>
</CUSTOMER>
<CUSTOMER ID="102">
<FIRSTNAME>Beth</FIRSTNAME>
..
</CUSTOMER>
</CUSTOMERS>

Listing 2: Loading a XML Document

PBDOM_Builder lpbdom_Builder
PBDOM_Document lpbdom_Doc
PBDOM_Object lpbdom_Obj[]
PBDOM_Element lpbdom_Root
integer li_Counter, li_Max
string ls_Text

// Create PBDOM Builder
lpbdom_Builder = CREATE PBDOM_BUILDER
TRY
// Import File and generate XML
Document
lpbdom_Doc = &
lpbdom_Builder.BuildFromFile(
"XMLOUT.XML" )

CATCH (PBDOM_Exception lpbdom_Except)
// Error Handling goes here,
MessageBox( "PBDOM_Exception", &
lpbdom_Except.GetExceptionCode())
RETURN
END TRY

// Get 1st Level data
lpbdom_Doc.GetContent( lpbdom_Obj )
li_Max = UpperBound( lpbdom_Obj )
FOR li_Counter = 1 TO li_Max
ls_Text = ls_Text + "~r~n" + &
lpbdom_Obj[li_Counter].GetObject
ClassString()+&
": " + lpbdom_Obj[ li_Counter ].Get
Name()
NEXT

lpbdom_Root = lpbdom_Doc.GetRootElement()
ls_Text = ls_Text + "~r~n" + &
lpbdom_Root.GetObjectClassString() + &
": " + lpbdom_Root.GetName()

DESTROY lpbdom_Builder

Listing 3: Display XML Document in a TreeView

/* Parameters:
pbdom_object apbdom_Obj[]
long al_Parent
*/
PBDOM_Object lpbdom_Children[]
PBDOM_Attribute lpbdom_Attr[]
PBDOM_Element lpbdom_Element
long ll_Handle
integer li_Counter, li_Max, li_Attr
Counter, &
li_AttrMax
string ls_Disp

li_Max = UpperBound(apbdom_Obj)
// Loop through all elements in the array

FOR li_Counter = 1 TO li_Max
ls_Disp = ""
// Get tag information depeding on type
of entry
CHOOSE CASE &
apbdom_Obj[li_Counter].GetObject
ClassString()
CASE "pbdom_processinginstruction"
ls_Disp = ": " + &
apbdom_Obj[li_Counter].DYNAMIC
GetData()
CASE "pbdom_text"
ls_Disp = ": " + &
apbdom_Obj[li_Counter].DYNAMIC
GetText()
CASE "pbdom_element"
// An element might have
attributes
lpbdom_Element = apbdom_Obj[
li_Counter]
IF lpbdom_Element.HasAttributes()
THEN
lpbdom_Element. GetAttributes
(lpbdom_Attr)
li_AttrMax = UpperBound
(lpbdom_Attr)
// Loop through all attributes
FOR li_AttrCounter = 1 TO
li_AttrMax
ls_Disp = ls_Disp + &
lpbdom_Attr[li_AttrCounter].GetName()+&
"=" + &
lpbdom_Attr[li_AttrCounter].GetText()+ " "
NEXT
ls_Disp = ": " + ls_Disp
END IF
CASE ELSE
ls_Disp = ": " + &
apbdom_Obj[li_Counter].GetText()
END CHOOSE
// Display name + additional
information
ls_Disp = apbdom_Obj[li_Counter].
GetName()+&
ls_Disp
ll_Handle=tv_1.InsertItemLast(al_
Parent,ls_Disp,0)
// if object has children call the same
function
IF apbdom_Obj[li_Counter].HasChildren()
THEN
apbdom_Obj[li_Counter].GetContent(lpbdom_
Children)
of_BuildTree(lpbdom_Children,ll_
Handle)
tv_1.ExpandItem(ll_Handle)
END IF
NEXT
RETURN

Listing 4: Searching an Element with Attribute of certain Value

/* Parameters
By reference pbdom_object apbdom_Found
String as_Element, as_Attribute, as_Value
pbdom_object apbdom_Start
*/
boolean lb_Found
PBDOM_Object lpbdom_Obj[]
PBDOM_Attribute lpbdom_Attrib[]
PBDOM_Element lpbdom_Ele
string ls_Attribute
long ll_Counter, ll_Max
integer li_Counter, li_Max

apbdom_Start.GetContent(lpbdom_Obj)
ll_Max = UpperBound(lpbdom_Obj)
// Loop over all objects
FOR ll_Counter = 1 TO ll_Max
IF lpbdom_Obj[ll_Counter].
GetObjectClassString() &
= "pbdom_element" THEN
lpbdom_Ele = lpbdom_Obj[ll_Counter]
IF lpbdom_Ele.GetName()=as_Element
THEN
// Get Attributes
lpbdom_Ele.GetAttributes(lpbdom_Attrib)
li_Max = UpperBound(lpbdom_Attrib)
// Loop over all Attributes
FOR li_Counter = 1 TO li_Max
ls_Attribute = &
lpbdom_Attrib[li_Counter].
GetName()
IF ls_Attribute = as_Attribute
THEN
IF lpbdom_Ele.GetAttributeValue
(ls_Attribute)&
= as_Value THEN
apbdom_Found = lpbdom_Obj
[ll_Counter]
lb_Found = TRUE
EXIT
END IF
END IF
NEXT
END IF
IF NOT lb_Found AND &
lpbdom_Ele.HasChildren() THEN
lb_Found = &
This.of_FindElementWithAttribute
Value( &
apbdom_Found,as_Element,as
_Attribute,&
as_Value,lpbdom_Ele)
END IF
END IF
IF lb_Found THEN
EXIT
END IF
NEXT

RETURN lb_Found

Listing 5: Adding an Element

PBDOM_Element lpbdom_Customer,
lpbdom_Order, &
lpbdom_OrderDate, lpbdom_OrderRegion

TRY
// Create sales order
lpbdom_Order = CREATE PBDOM_Element
lpbdom_Order.SetName( "SALESORDER" )
lpbdom_Order.SetAttribute( "ID", "111" )

// Create order date
lpbdom_OrderDate = CREATE PBDOM_Element
lpbdom_OrderDate.SetName( "ORDERDATE" )
lpbdom_OrderDate.SetText( "2004-12-31" )

// Create order region
lpbdom_OrderRegion = CREATE PBDOM_
Element
lpbdom_OrderRegion.SetName(
"ORDERREGION" )
lpbdom_OrderRegion.SetText(
"Switzerland" )

// Add elements to sales order
lpbdom_Order.AddContent( lpbdom_
OrderDate )
lpbdom_Order.AddContent( lpbdom_
OrderRegion )

// Add sales order to customer
lpbdom_Customer.AddContent(
lpbdom_Order )

CATCH (PBDOM_Exception lpbdom_Except2)
// Error Handling goes here,
MessageBox( "PBDOM_Exception", &
lpbdom_Except2.GetExceptionCode())
RETURN
END TRY