LOTUSSCRIPT/COM/OLE CLASSES


Examples: Create Node methods
This agent parses the origXML file, creates new nodes and reports on the results in outputFile.

(Declarations)
Dim session As NotesSession
Dim inputStream As NotesStream, outputStream As NotesStream
Dim domParser As NotesDOMParser
Dim docNode As NotesDOMDocumentNode
Dim docRootNode As NotesDOMNode
Dim NL As String            'carriage return + line feed
Dim cstrType(13) As String  'convert node type to descriptive string

Sub Initialize
 Dim origXML As String, outputFile As String
 origXML = "c:\dxl\xmlin.xml"
 outputFile = "c:\dxl\DOMcreatenode.txt"
 NL = Chr(13)+Chr(10)

 cstrType(DOMNODETYPE_ELEMENT_NODE) =  "ELEMENT_NODE"
 cstrType(DOMNODETYPE_ATTRIBUTE_NODE) = "ATTRIBUTE_NODE"
 cstrType(DOMNODETYPE_TEXT_NODE) =  "TEXT_NODE"
 cstrType(DOMNODETYPE_CDATASECTION_NODE) =  "CDATASECTION_NODE"
 cstrType(DOMNODETYPE_ENTITYREFERENCE_NODE) = _
 "ENTITYREFERENCE_NODE"
 cstrType(DOMNODETYPE_ENTITY_NODE) = "ENTITY_NODE"
 cstrType(DOMNODETYPE_PROCESSINGINSTRUCTION_NODE) = _
 "PROCESSINGINSTRUCTION_NODE"  
 cstrType(DOMNODETYPE_COMMENT_NODE) =  "COMMENT_NODE"
 cstrType(DOMNODETYPE_DOCUMENT_NODE) = "DOCUMENT_NODE"
 cstrType(DOMNODETYPE_DOCUMENTTYPE_NODE) = "DOCUMENTTYPE_NODE"
 cstrType(DOMNODETYPE_DOCUMENTFRAGMENT_NODE) = _
 "DOCUMENTFRAGMENT_NODE"
 cstrType(DOMNODETYPE_NOTATION_NODE) = "NOTATION_NODE"
 cstrType(DOMNODETYPE_XMLDECL_NODE) =  "XMLDECL_NODE"
 
 On Error Goto errh
 
 Set session = New NotesSession
 Set outputStream =session.CreateStream
 outputStream.Open (outputFile)
 outputStream.Truncate
 outputStream.WriteText("DOM Create Nodes Report - original tree data"+NL)
 Set inputStream = session.CreateStream
 inputStream.Open (origXML)
 If inputStream.Bytes = 0 Then
   Messagebox "XML file "+ origXML+" is empty"
   Goto closeReport
 End If
 
 Call  createNewNodes
 
closeReport:
 Call outputStream.Close
 Messagebox "Report written to "+outputFile
 Exit Sub
errh:
 Messagebox (Cstr(Err) + ":  " + Error + Chr(13))
 Resume closeReport
End Sub

Sub createNewNodes
 Dim cdataNode As NotesDOMCDATASectionNode
 Dim commentNode As NotesDOMCommentNode
 Dim textNode As NotesDOMTextNode
 Dim docFragNode As NotesDOMDocumentFragmentNode
 Dim newNode As NotesDOMElementNode
 Dim entityrefNode As NotesDOMEntityReferenceNode
 Dim piNode As NotesDOMProcessingInstructionNode
 
 Set domParser=session.CreateDOMParser(inputStream, outputStream)
 domParser.Process
 Set docNode = domParser.Document
 Set docRootNode = docNode.DocumentElement
 
 'report on the tree: create new nodes
 Call walkTree(docRootNode)
 
 'update the tree
 outputStream.WriteText(NL+"DOM Create Nodes Report - modified tree"+NL)
 
 Set commentNode = docNode.CreateCommentNode("created comment node")
 Call docRootNode.AppendChild(commentNode)
 
 Set cdataNode = docNode.CreateCDataSectionNode("some cdata stuff")
 Call docRootNode.AppendChild(cdataNode)
 
 Set textNode =  docNode.CreateTextNode("New text node using a docfragment")
 Set docFragNode = docNode.CreateDocumentFragmentNode
 Call docFragNode.AppendChild(textNode)
 Call docRootNode.AppendChild(docFragNode)
 
 Set newNode = docNode.CreateElementNode("NewElement")
 Call docRootNode.AppendChild(newNode)
 
 Set entityrefNode = docNode.CreateEntityReferenceNode("NewEntity")
 Call docRootNode.AppendChild(entityrefNode)
 
 Set piNode = docNode.CreateProcessingInstructionNode("xml", "version=1.0")
 Call docRootNode.AppendChild(piNode)
 
 'report on updated tree
 Call walkTree(docRootNode)
 
End Sub

Sub walkTree ( node As NotesDOMNode)
 Dim child As NotesDOMNode
 Dim eNode As NotesDOMElementNode
 Dim piNode As NotesDOMProcessingInstructionNode
 Dim nNodes As Integer
 NL = Chr(13)+Chr(10)
 
 If Not node.IsNull Then 'report on the node
   domParser.Output( cstrType(node.NodeType) + NL)
   domParser.Output( "Node name: "+node.NodeName+NL)
   
   Select Case node.NodeType
   'some nodes have more information to report on
     
   Case DOMNODETYPE_DOCUMENT_NODE:
     Set child = node.FirstChild
     nNodes = node.NumberOfChildNodes
     domParser.Output("Node has "+Cstr(nNodes) _
     + " Child Nodes"+NL)
     
     While nNodes > 0
       Call walkTree(child)
       Set child = child.NextSibling
       nNodes = nNodes - 1
     Wend
     
   Case DOMNODETYPE_ELEMENT_NODE:
     Set eNode = node
     
     Set child = node.FirstChild
     nNodes = node.NumberOfChildNodes
     domParser.Output("Node has "+Cstr(nNodes) _
     + " Child Nodes"+NL)
     
     While nNodes > 0
       Call walkTree(child)
       Set child = child.NextSibling
       nNodes = nNodes - 1
     Wend
     
   Case DOMNODETYPE_TEXT_NODE:
     domParser.Output( "Node value: "+node.NodeValue+NL)
     
   Case DOMNODETYPE_COMMENT_NODE:
     domParser.Output( "Node value: "+node.NodeValue+NL)
     
   Case DOMNODETYPE_PROCESSINGINSTRUCTION_NODE:
     Set piNode = node
     domParser.Output("Target:  "+piNode.Target +NL)
     domParser.Output( "Data: "+piNode.Data+NL)
     
   Case DOMNODETYPE_ENTITY_NODE:
     domParser.Output( "Node value: "+node.NodeValue+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)
     
   End Select 'node.NodeType
 End If 'Not node.IsNull
End Sub

See Also