Implementing the ContentHandler (Visual Basic)
For the JumpStart application, you create the ContentHandler
by adding a class that implements the IVBSAXContentHandler
interface. Although creating a class may sound complex, Microsoft® Visual Basic® automates most of the process.
Opening a New Project
Before you can create a class based on the IVBSAXContentHandler
interface, you must create a new project and then reference that project to Microsoft XML Core Services (MSXML) 5.0 for Microsoft Office.
To create a new project
- Open Visual Basic 6.0 and, in the New Project dialog box, double-click Standard EXE.
Referencing MSXML
You must now instruct your application to use the MSXML2 type library provided with MSXML 5.0.
To create a reference to MSXML 5.0
- On the Project menu, click References.
- In the Available References list, select Microsoft XML, v5.0, and then click OK.
Creating and Implementing the Handler Class
You are now ready to create and implement the new ContentHandler
class.
To create a new class
- On the Project menu, click Add Class Module.
- In the Add Class Module dialog box, double-click Class Module.
- On the View menu, select Properties Window.
- In the Properties Window, enter "ContentHandlerImpl" for the Name property.
To implement the ContentHandlerImpl Class
- In the Class Window, type "Implements", and then press the space bar.
A drop down list appears with the all the available classes. (This list includes interfaces that are actually abstract classes.)
- In the drop-down list, double-click IVBSAXContentHandler. This is the interface you implement to create the
ContentHandlerImpl
class. - In the Object drop-down list on the left side of the Class Window, click IVBSAXContentHandler.
This automatically adds code to the Class Window.
- In the Procedure drop-down list on the right-hand side of the Class Window, select the
IVBSAXContentHandler
method or property that you want to add to this class. (You have to select each method even though you do not need to add code to each one.)For example, select
startElement
to add this method to theContentHandlerImpl
class. (When parsing an XML document, the reader will invoke this method each time it encounters a new element in the document.) After you selectstartElement
from the list, the following code appears in the Class Window:Private Sub IVBSAXContentHandler_startElement _ (strNamespaceURI As String, _ strLocalName As String, _ strQName As String, _ ByVal oAttributes As MSXML2.IVBSAXAttributes) End Sub
- To enable the method or event selected in Step 4 to handle the corresponding event, you need to add the appropriate code to that method or property.
For the
startElement
method added in Step 4, enter the code required to make the method look like this:Private Sub IVBSAXContentHandler_startElement _ (strNamespaceURI As String, _ strLocalName As String, _ strQName As String, _ ByVal attributes As MSXML2.IVBSAXAttributes) Dim i As Integer Form1.Text2.text = Form1.Text2.text & "<" & strLocalName For i = 0 To (attributes.length - 1) Form1.Text2.text = Form1.Text2.text & " " _ & attributes.getLocalName(i) & "=""" _ & attributes.getValue(i) & """" Next Form1.Text2.text = Form1.Text2.text & ">" If strLocalName = "qu" Then Err.Raise vbObjectError + 1, "ContentHandler.startElement", _ "Found element <qu>" End If End Sub
- To handle additional events passed by the reader, repeat steps 4 and 5 for each method or property that you want to add to the
ContentHandlerImpl
class.
Complete Code for the ContentHandlerImpl Class
The preceding instructions explain how to create a new project with a reference to Microsoft XML, v5.0, and how to create a ContentHandler
class called ContentHandlerImpl
by implementing the IVBSAXContentHandler
interface. The following shows the complete code for the ContentHandlerImpl
class.
Option Explicit Implements IVBSAXContentHandler Private Sub IVBSAXContentHandler_startElement _ (strNamespaceURI As String, _ strLocalName As String, _ strQName As String, _ ByVal attributes As MSXML2.IVBSAXAttributes) Dim i As Integer Form1.Text2.text = Form1.Text2.text & "<" & strLocalName For i = 0 To (attributes.length - 1) Form1.Text2.text = Form1.Text2.text & " " & _ attributes.getLocalName(i) & "=""" & _ attributes.getValue(i) & """" Next Form1.Text2.text = Form1.Text2.text & ">" If strLocalName = "qu" Then Err.Raise vbObjectError + 1, "ContentHandler.startElement", _ "Found element <qu>" End If End Sub Private Sub IVBSAXContentHandler_endElement(strNamespaceURI As String, _ strLocalName As String, _ strQName As String) Form1.Text2.text = Form1.Text2.text & "</" & strLocalName & ">" End Sub Private Sub IVBSAXContentHandler_characters(text As String) text = Replace(text, vbLf, vbCrLf) Form1.Text2.text = Form1.Text2.text & text End Sub Private Property Set IVBSAXContentHandler_documentLocator(ByVal RHS As _ MSXML2.IVBSAXLocator) End Property Private Sub IVBSAXContentHandler_endDocument() End Sub Private Sub IVBSAXContentHandler_endPrefixMapping(strPrefix As String) End Sub Private Sub IVBSAXContentHandler_ignorableWhitespace(strChars As String) End Sub Private Sub IVBSAXContentHandler_processingInstruction(target As String, _ data As String) Form1.Text2.text = Form1.Text2.text & "<?" & target & " " _ & data & ">" End Sub Private Sub IVBSAXContentHandler_skippedEntity(strName As String) End Sub Private Sub IVBSAXContentHandler_startDocument() End Sub Private Sub IVBSAXContentHandler_startPrefixMapping(strPrefix As String, _ strURI As String) End Sub
As you can see from the sample code, not all methods or properties have custom code added to them. When you implement a handler for the Simple API for XML (SAX2), you can add only the methods or properties that you need.
In the next section, you create the ErrorHandler
for the JumpStart application.