LOTUSSCRIPT/COM/OLE CLASSES
(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