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