Example 1: Extracting phone numbers from a directory

This example shows how to write a SAX filter to extract phone numbers from a directory file written in XML.
MAIN
  DEFINE f om.SaxDocumentHandler
  LET f = om.SaxDocumentHandler.createForName("module1")
  CALL f.readXmlFile("customers.xml")
END MAIN
Note:

The parameter of the createForName() method specifies the name of a source file that has been compiled into a .42m file ("module1.42m" in our example).

The module module1.4gl:
FUNCTION startDocument()
END FUNCTION

FUNCTION processingInstruction(name,data)
  DEFINE name,data STRING
END FUNCTION

FUNCTION startElement(name,attr)
  DEFINE name STRING
  DEFINE attr om.SaxAttributes 
  DEFINE i INTEGER
  CASE name
    WHEN "Customer"
      DISPLAY attr.getValue("lname")," ", attr.getValue("fname")
    WHEN "CellPhone"
      DISPLAY "   Cell phone: ", attr.getValue("number")
    WHEN "WorkPhone"
      DISPLAY "   Work phone: ", attr.getValue("number")
  END CASE
END FUNCTION

FUNCTION endElement(name)
  DEFINE name STRING
END FUNCTION

FUNCTION endDocument()
END FUNCTION

FUNCTION characters(chars)
  DEFINE chars STRING
END FUNCTION

FUNCTION skippedEntity(chars)
  DEFINE chars STRING
END FUNCTION
The XML file customers.xml:
<Customers>
  <Customer customer_num="101" fname="Ludwig" lname="Pauli"
    company="All Sports Supplies" address1="213 Erstwild Court"
    address2="" city="Sunnyvale" state="CA" zip-code="94086">
    <CellPhone number="408-789-8075" />
    <WorkPhone number="873-123-4543" />
  </Customer>
  <Customer customer_num="102" fname="Carole" lname="Sadler"
    company="Sports Spot" address1="785 Geary St"
    address2="" city="San Francisco" state="CA" zip-code="94117">
    <CellPhone number="415-822-1289" />
    <WorkPhone number="834-842-8373" />
  </Customer>
  <Customer customer_num="103" fname="Philip" lname="Currie"
    company="Phil's Sports" address1="654 Poplar"
    address2="P. O. Box 3498" city="Palo Alto" state="CA"
    zip-code="94303">
    <CellPhone number="415-328-4543" />
    <WorkPhone number="932-118-4824" />
  </Customer>
</Customers>
Output:
Pauli Ludwig
   Cell phone: 408-789-8075
   Work phone: 873-123-4543
Sadler Carole
   Cell phone: 415-822-1289
   Work phone: 834-842-8373
Currie Philip
   Cell phone: 415-328-4543
   Work phone: 932-118-4824