LOTUSSCRIPT/COM/OLE CLASSES


Examples: NodeName, NodeType and NodeValue properties
This agent parses the origXML file and writes node name and value information to outputFile.

(Declarations)
Dim domParser As NotesDOMParser
Dim NL As String    'carriage return + line feed

Sub Initialize
 Dim session As NotesSession
 Dim db As NotesDatabase
 Dim inputStream As NotesStream, outputStream As NotesStream
 Dim docNode As NotesDOMDocumentNode
 
 Dim origXML As String, outputFile As String
 origXML = "c:\dxl\xmlnode.xml"
 outputFile = "c:\dxl\nodeName.txt"
 
 Dim message As String
 message = "DOM Parser Report - NodeName & NodeValue"
 NL = Chr(13)+Chr(10)
 
 On Error Goto errh
 
 Set session = New NotesSession
 Set db = session.CurrentDatabase
 
 'create the output file
 Set outputStream =session.CreateStream
 outputStream.Open (outputFile)
 outputStream.Truncate
 
 'write report title
 outputStream.WriteText (message+NL)
 
 'open the XML file
 Set inputStream = session.CreateStream
 inputStream.Open (origXML)
 If inputStream.Bytes = 0 Then
   message = origXML+" is empty"
   Goto results
 End If
 
 'create DOM parser and process
 Set domParser=session.CreateDOMParser(inputStream, outputStream)
 domParser.Process
 
 'get the document node
 Set docNode = domParser.Document
 
 Call walkNameValue(docNode)
 message = "end of file: "+origXML
 
results:
 outputStream.WriteText (message)
 Call outputStream.Close
 Exit Sub
errh:
 message = Cstr(Err)+":  "+Error+Chr(13)
 Resume results
End Sub

Sub walkNameValue ( node As NotesDOMNode)
 Dim child As NotesDOMNode
 Dim eNode As NotesDOMElementNode
 Dim piNode As NotesDOMProcessingInstructionNode
 Dim numChildNodes As Integer
 NL = Chr(13)+Chr(10)
 
 If Not node.IsNull Then
   domParser.Output( CstrNodeType(node)+NL)
   domParser.Output( "Node name: "+node.NodeName+NL)
   
   Select Case node.NodeType
     
   Case DOMNODETYPE_DOCUMENT_NODE:        ' The Document node
     domParser.Output( "Node value: null"+NL)
     
     Set child = node.FirstChild   ' Get the first node
     numChildNodes = node.NumberOfChildNodes
     domParser.Output("Node has "+Cstr(numChildNodes)+" Child Nodes"+NL)
     
     While numChildNodes > 0
       Call walkNameValue(child)
       Set child = child.NextSibling ' Get next node
       numChildNodes = numChildNodes - 1
     Wend
     
   Case DOMNODETYPE_ELEMENT_NODE:          ' Most nodes are Elements
     domParser.Output( "Node value:  null"+NL)
     Set eNode = node
     domParser.Output( "Tag name: "+eNode.Tagname+NL)
   
     Set child = node.FirstChild   ' Get the first node
     numChildNodes = node.NumberOfChildNodes
     domParser.Output("Node has "+Cstr(numChildNodes)+" Child Nodes"+NL)
     
     While numChildNodes > 0
       Call walkNameValue(child)
       Set child = child.NextSibling           ' Get next child
       numChildNodes = numChildNodes - 1
     Wend
     
   Case DOMNODETYPE_DOCUMENTTYPE_NODE:   ' It is a <!DOCTYPE> tag
     domParser.Output( "Node value: null"+NL)
     
   Case DOMNODETYPE_TEXT_NODE:           ' Plain text node
     domParser.Output( "Node value: "+node.NodeValue+NL)
     
   Case DOMNODETYPE_COMMENT_NODE:        ' Comments
     domParser.Output( "Node value: "+node.NodeValue+NL)
     
   Case DOMNODETYPE_PROCESSINGINSTRUCTION_NODE:   ' Handle PI nodes
     Set piNode = node
     domParser.Output(" with Target  "+piNode.Target +" and Data "+piNode.Data+NL)
     
   Case DOMNODETYPE_ENTITY_NODE:
     domParser.Output( "Node value: "+node.NodeValue+NL)
     
   Case DOMNODETYPE_ENTITYREFERENCE_NODE:         ' Handle entities
     domParser.Output( "Node value: null"+NL)
     
   Case DOMNODETYPE_CDATASECTION_NODE:
     domParser.Output( "Node value: "+node.NodeValue+NL)
     
   Case DOMNODETYPE_ATTRIBUTE_NODE:
     domParser.Output( "Node value: "+node.NodeValue+NL)
     
   Case DOMNODETYPE_DOCUMENTFRAGMENT_NODE:
     domParser.Output( "Node value: "+node.NodeValue+NL)
     
   Case DOMNODETYPE_NOTATION_NODE:
     domParser.Output( "Node value: "+node.NodeValue+NL)
     
   Case DOMNODETYPE_XMLDECL_NODE:
     domParser.Output( "Node value: "+node.NodeValue+NL)
     
   Case Else:
     domParser.Output("Ignoring node: "+Cstr(node.NodeType)+NL)
     
   End Select  'node.NodeType
 End If        'Not node.IsNull
End Sub

Function CstrNodeType (currentNode As NotesDOMNode) As String
 If Not currentNode.IsNull Then
   Select Case currentNode.NodeType
     
   Case DOMNODETYPE_ELEMENT_NODE:       '1
     CstrNodeType = "DOMNODETYPE_ELEMENT_NODE"
     
   Case DOMNODETYPE_ATTRIBUTE_NODE:     '2
     CstrNodeType = "DOMNODETYPE_ATTRIBUTE_NODE"
     
   Case DOMNODETYPE_TEXT_NODE:          '3
     CstrNodeType = "DOMNODETYPE_TEXT_NODE_NODE"
     
   Case DOMNODETYPE_CDATASECTION_NODE:  '4
     CstrNodeType = "DOMNODETYPE_CDATASECTION_NODE"
     
   Case DOMNODETYPE_ENTITYREFERENCE_NODE:'5
     CstrNodeType = "DOMNODETYPE_ENTITYREFERENCE_NODE"
     
   Case DOMNODETYPE_ENTITY_NODE:         '6
     CstrNodeType = "DOMNODETYPE_ENTITY_NODE"
     
   Case DOMNODETYPE_PROCESSINGINSTRUCTION_NODE:  '7
     CstrNodeType = "DOMNODETYPE_PROCESSINGINSTRUCTION_NODE"
     
   Case DOMNODETYPE_COMMENT_NODE:        '8
     CstrNodeType = "DOMNODETYPE_COMMENT_NODE"
     
   Case DOMNODETYPE_DOCUMENT_NODE:       '9
     CstrNodeType = "DOMNODETYPE_DOCUMENT_NODE"
     
   Case DOMNODETYPE_DOCUMENTTYPE_NODE:   '10
     CstrNodeType = "DOMNODETYPE_DOCUMENTTYPE_NODE"
     
   Case DOMNODETYPE_DOCUMENTFRAGMENT_NODE:      '11
     CstrNodeType = "DOMNODETYPE_DOCUMENTFRAGMENT_NODE"
     
   Case DOMNODETYPE_NOTATION_NODE:              '12
     CstrNodeType = "DOMNODETYPE_NOTATION_NODE"
     
   Case DOMNODETYPE_XMLDECL_NODE:               '13
     CstrNodeType = "DOMNODETYPE_XMLDECL_NODE"
   End Select
 Else
   CstrNodeType = "Null Node"
 End If
End Function

See Also