Listing 1: XML format for customer details

<?xml version="1.0" encoding="utf-8" ?>
- <!--
XMLTextWriter Example
  -->
- <CustomerDetails>
- <Customer>
  <FirstName>Michaels aaa</FirstName>
  <LastName>Devlin</LastName>
  <CompanyName>The Power Group</CompanyName>
  <PhoneNumber>2015558966</PhoneNumber>
  </Customer>
- <Customer>
  <FirstName>Beth</FirstName>
  <LastName>Reiser</LastName>
  <CompanyName>AMF Corp.</CompanyName>
  <PhoneNumber>2125558725</PhoneNumber>
  </Customer>
...
  </CustomerDetails>


Listing 2: The script of the clicked event of the "Save as XML" button

string ls_path, ls_file
int li_rc

li_rc = GetFileSaveName ( "Save XML File", ls_path, ls_file,&  "XML", "Xml Files (*.xml),*.xml" , "", 32770)

IF li_rc = 1 Then
	saveXmlFile(ls_path, dw_1)
End If


Listing 3: SaveXmlFile

#if defined pbdotnet then

system.xml.xmlwriter wt
wt = system.xml.xmlwriter.create(path)

int rows
rows = dw.rowcount()

//wt.Formatting = system.xml.Formatting.Indented

wt.WriteStartDocument() //Start a new document

// Write the Comment
wt.WriteComment("XMLTextWriter Example")

// Insert an Start element tag
wt.WriteStartElement("CustomerDetails")

long i
for i = 1 to rows
	// Write the Customer element
	wt.WriteStartElement("Customer","")

	// Write the FirstName elemenent and its data
	wt.WriteStartElement("FirstName","")
	wt.WriteString(dw.getItemString(i, 1))
	wt.WriteEndElement()

	// Write the LastName Element and its data
	wt.WriteStartElement("LastName","")
	wt.WriteString(dw.getItemString(i, 2))
	wt.WriteEndElement()

	// Write the CompanyName element and its data
	wt.WriteStartElement("CompanyName","")
	wt.WriteString(dw.getItemString(i, 3))
	wt.WriteEndElement()

	// Write the PhoneNumber element and its data
	wt.WriteStartElement("PhoneNumber","")
	wt.WriteString(dw.getItemString(i, 4))
	wt.WriteEndElement()

	wt.WriteEndElement()
next

// End all the tags here
wt.WriteEndDocument()

wt.Flush()
wt.Close()

#end if


Listing 4: The readXmlFile function

#if defined pbdotnet then

system.xml.XmlTextReader reader
reader = create system.xml.XmlTextReader(path)

long handles[]
int depth
long i
long currHandle

reader.MoveToContent()
Do While Not reader.EOF
  choose case reader.nodeType
    case system.xml.XmlNodeType.Element!
      depth = reader.depth
      if depth > 0 then
        currHandle = tv_1.insertItemLast(handles[depth], &
          "Element : " + reader.name, 0)
        handles[depth+1] = currHandle

        if reader.hasAttributes then
          For i = 0 To reader.AttributeCount - 1
            reader.MoveToAttribute(i)
            tv_1.insertItemLast(currHandle, "Attribute : " + &
              reader.Name + " : " + reader.value, 0)
          	Next
           reader.MoveToElement()
         end if
       else
         handles[1] = tv_1.insertItemLast(0, reader.name, 0)
       end if

     case system.xml.XmlNodeType.Text!
       tv_1.insertItemLast(currHandle, "Text : "+reader.value, 0)

  end choose

  reader.Read()
Loop

reader.Close()

#end if

long ll_tvi
ll_tvi = tv_1.FindItem(RootTreeItem! , 0)
tv_1.ExpandItem(ll_tvi)


Listing 5: The readXmlFile function of window w_dom

long ll_tvi

#if defined PBDOTNET then

system.xml.xmlDocument doc
doc = create system.xml.XmlDocument

system.xml.xmlTextReader reader
reader = create system.xml.XmlTextReader(path)

reader.WhitespaceHandling = system.xml.WhitespaceHandling.None!
doc.Load(reader)

n_xmlelement nelement
nelement = create n_xmlElement
nelement.element = doc.documentElement

populateTree(0, nelement)

#end if

ll_tvi = tv_1.FindItem(RootTreeItem! , 0)
tv_1.ExpandItem(ll_tvi)

Listing 6: The populateTree function of w_dom

#if defined pbdotnet then

system.xml.xmlElement currEle
currEle = element.element

long curr
curr = tv_1.insertItemLast(parentNode, currEle.Name, 0)

long n
n = currEle.childNodes.count

n_xmlElement ele
ele = create n_xmlElement

long i
system.xml.xmlNode node
for i = 0 to n - 1
  node = currEle.childNodes.Item(i)

  choose case node.nodeType
    case system.xml.xmlNodeType.Element!
       ele.element = node
       populateTree(curr, ele)

    case system.xml.xmlNodeType.Attribute!
      tv_1.insertItemLast(curr, "Attribute : " + node.name + &
        " : " + node.value, 0)

    case system.xml.xmlNodeType.Text!
      tv_1.insertItemLast(curr, "Text : " + node.value, 0)
  end choose
next

return curr

#end if

return 0


Listing 7 Using XpathDocument and XPathNavigator

#if defined pbdotnet then

system.xml.xpath.xpathDocument doc
doc = create system.xml.xpath.XPathDocument(sle_1.text)

system.xml.xpath.XPathNavigator nav
nav = doc.CreateNavigator()

system.xml.xpath.XPathNodeIterator iter
iter = nav.Select(sle_2.text)

do While iter.MoveNext()
	lb_1.AddItem(iter.Current.Value)
loop

#end if