Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win


VB 6 and SAX (reading an XML file being used by the DOM)

Posted on 2004-07-30
Medium Priority
Last Modified: 2008-01-09
I would like to create a systray application which will show the current status of an application.  The idea is that I will determine the status of a batch process by reading its corresponding XML log file.  The log file looks like this:
      <RunGroup logDate="2004/07/30 12:13:43 PM">
            <TaskGroup logDate="2004/07/30 12:13:43 PM" name="Backup XPS Directory">
                  <method logDate="2004/07/30 12:13:43 PM" name="zip" status="success">
                  <method logDate="2004/07/30 12:13:44 PM" name="copy" status="success">
      <RunGroup logDate="2004/07/30 12:13:53 PM">
            <TaskGroup logDate="2004/07/30 12:13:53 PM" name="Backup XPS Directory">
                  <method logDate="2004/07/30 12:13:53 PM" name="zip" status="success">
                  <method logDate="2004/07/30 12:13:54 PM" name="copy" status="failed">
The application creating this log file is doing so via the MSXML DOM (version 4).

When I attempt to access the file also using the DOM while the other process is writing to it I get an error stating that I cannot access it since another process is using it.
I am assuming that this is because the DOM can be used to write to the file as well.  However, in my case I only want to read from the file.
So, I am assuming that I have to use SAX to do this, but just can't get a grasp on how to do this.  I have read numerous Microsoft articles but still am not sure.

So, can anyone provide code to extract from the above the last status?  From the above it would be "failed".  Also, am I correct in saying that SAX will be able to access the file while the DOM still has a hold of it?  If this is incorrect, is there a way to actually do this?
Question by:dtomyn
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
LVL 75

Expert Comment

by:Anthony Perkins
ID: 11681088
It would be no different with SAX.  You are going to have to retry until it has quit writing the Xml document.

Author Comment

ID: 11681179
Is SAX not like a read only recorset though?  Can you think of any other alternative (than to keep retrying)?   Hmmm... I suppose if the file is locked I can assume that the other process is working though... I was hoping to be able to display the method though in the tooltip.
LVL 75

Expert Comment

by:Anthony Perkins
ID: 11681488
>>Is SAX not like a read only recorset though? <<
In a sense, yes.  Although strictly speaking it is more like a firehose (forward-only, read-only) resultset.  But to continue your analogy, you cannot open (not even) a read-only recordset if the database is opened exclusively.  I suspect what is happening is that while it is writing the file is locked.  However, this has to be only very briefly, so a retry after one second should suffice.

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.


Author Comment

ID: 11681573
Would you be able to post some code to read the last status attribute given the XML above (using SAX... my current method is using the DOM)?  Just for completeness I would like to try this.
LVL 75

Expert Comment

by:Anthony Perkins
ID: 11681822
Sorry cannot help you there, I have never used it.  Hopefully someone else can step up to the plate.

Accepted Solution

aParser earned 1000 total points
ID: 11992949
Based in part on http://builder.com.com/5100-6373-1054452.html


Implements MSXML2.IVBSAXContentHandler
Implements MSXML2.IVBSAXErrorHandler
Private moSaxReader As MSXML2.SAXXMLReader 'SAX reader
Public logDate As Date

Private Sub Class_Initialize()
    'set up the SAX reader
    Set moSaxReader = New MSXML2.SAXXMLReader
    'pass a reference to this object to use as the content handler...
    Set moSaxReader.contentHandler = Me
    'and error handler objects
    Set moSaxReader.errorHandler = Me
End Sub
Private Sub Class_Terminate()
    Set moSaxReader = Nothing
End Sub

Public Sub LoadLog(strFile As String)
    moSaxReader.parseURL strFile
End Sub
Private Sub IVBSAXContentHandler_startElement(strNamespaceURI As String, strLocalName As String, strQName As String, ByVal oAttributes As MSXML2.IVBSAXAttributes)
    ' add whatever conditions necessary here; "method" is only for illustration here
    If strLocalName = "method" Then
        logDate = CDate(oAttributes.getValueFromName("", "logDate"))
    End If
End Sub

[whatever routine you like]
    Dim o As CSAXLog
    Set o = New CSAXLog
    o.LoadLog strFilePath ' strFilePath is the full path to your log file
    Debug.Print "Last log date: " & o.logDate
    Set o = Nothing

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction While answering a recent question (http://www.experts-exchange.com/Q_27402310.html) in the VB classic zone, I wrote some VB code in the (Office) VBA environment, rather than fire up my older PC.  I didn't post completely correct code o…
Introduction While answering a recent question about filtering a custom class collection, I realized that this could be accomplished with very little code by using the ScriptControl (SC) library.  This article will introduce you to the SC library a…
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…
Suggested Courses

604 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question