Connecting an MXXMLWriter to a SAXXMLReader

MSXML 5.0 SDK

Microsoft XML Core Services (MSXML) 5.0 for Microsoft Office - SAX2 Developer's Guide

Connecting an MXXMLWriter to a SAXXMLReader

In many of the applications that you create with the latest version of the Simple API for XML (SAX2), you use both SAXXMLReader, which reads an XML document and passes events, and MXXMLWriter, which catches the events and produces output based on the data passed by the events. Before MXXMLWriter can catch events, however, you must connect it to SAXXMLReader. MXXMLWriter, on its own, does not provide the handlers required to catch events thrown by SAXXMLReader.

To enable MXXMLWriter to handle events, you must assign the SAX2 handler interfaces to it. These handler interfaces include IVBSAXContentHandler, IVBSAXDTDHandler, IVBSAXDeclHandler, IVBSAXErrorHandler, and IVBSAXLexicalHandler. By assigning the SAX2 handler interfaces to your MXXMLWriter object, you make all the properties and methods of the interfaces available to it. In this way, your MXXMLWriter object can catch any of the events passed by SAXXMLReader. The following sections describe how to create SAXXMLReader and MXXMLReader objects and how to connect them.

Creating the SAXXMLReader and MXXMLWriter Objects

To create instances of SAXXMLReader and MXXMLWriter, use the following syntax. For the sample MXXMLWriter application, the creation of the SAXXMLReader and MXXMLWriter objects is in the Declarations section of the form.

Dim rdr As New SAXXMLReader50
Dim wrt As New MXXMLWriter50

Type Casting MXXMLWriter to Handler Interfaces

SAX2 provides several handler interfaces that are designed to catch events passed by SAXXMLReader. You set these handler interfaces as properties of SAXXMLReader. To make these handler interfaces available to MXXMLWriter, you type cast MXXMLWriter to them.

For example, the sample MXXMLWriter application sets the contentHandler property of the rdr (SAXXMLReader) object to the wrt (MXXMLWriter) object, as shown in the following code. This registers the wrt object as the ContentHandler of the rdr object. This also sets the dtdHandler and errorHandler properties. You must set the declaration-handler and lexical-handler properties through the putProperty method.

Private Sub Form_Load()
    Set rdr.contentHandler = wrt
    Set rdr.dtdHandler = wrt
    Set rdr.errorHandler = wrt
    rdr.putProperty "http://xml.org/sax/properties/declaration-handler", _ 
      wrt
    rdr.putProperty "http://xml.org/sax/properties/lexical-handler", wrt
End Sub

Setting the Output Destination

In the sample MXXMLWriter application, clicking the Try File button clears both the text box and the output buffer (wrt.output). Then, the application calls the parse.URL method of SAXXMLReader and passes the name of the file in the TextFileName text box (as shown in bold in the following code sample). At this point, SAXXMLReader fires a series of events to pass the data in the XML document to the wrt object, which stores this data in the output buffer. By default, the output is a string value that, in this case, is set to the textResult.text box (as shown in bold in the following code sample). The output destination can also be set as an IStream.

Private Sub CommandTryFile_Click()
    ' Set parameters, clean the scene.
    TextSource.Text = ""
    wrt.output = ""
    wrt.omitXMLDeclaration = True
    On Error GoTo uhoh
    rdr.parseURL TextFileName.Text
    TextResult.Text = wrt.output
    Exit Sub
uhoh:
    TextResult.Text = "Error: " & Err.LastDllError & " -- " & _
      Err.Description & vbCrLf & "Check if file exists in the _
      correct place"
End Sub

See Also

Configuring MXXMLWriter Output | ISAXXMLReader Interface | IMXWriter Interface | ISAXContentHandler Interface | ISAXDeclHandler Interface | ISAXDTDHandler Interface | ISAXErrorHandler Interface | ISAXLexicalHandler Interface | output Property