Lotus Software logo
IBM Lotus Domino Designer 8.5
  Versions 8.5 and 8.5.1






Examples: ParentNode property

This agent parses the origXML file and writes information about parent, sibling and child nodes to outputFile.

(Declarations)

Dim session As NotesSession
Dim inputStream As NotesStream, outputStream As NotesStream
Dim domParser As NotesDOMParser
Dim docNode As NotesDOMDocumentNode
Dim NL As String 'carriage return + line feed
Dim nodeCount(12) As Long
Sub Initialize

Dim i As Integer
Dim j As Long

Dim origXML As String, outputFile As String
origXML = "c:\dxl\NAB.xml"
outputFile = "c:\dxl\DOMnodes.doc"

REM your message here!
Dim message As String
message = "DOM Parser Report - Node Relationships"

On Error Goto errh

'open the XML input file and create the report file
If Not xmlCreate(origXML,outputFile,message) Then
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

REM report on parent/child/sibling nodes
For i = 0 To 12
nodeCount(i) = 0
Next

Call walktree (docNode)

outputStream.WriteText (NL+NL+"Report status ---"+NL)
For j = 0 To 12
outputStream.WriteText (Cstr(nodeCount(j))+" "+CstrNodeType(j)+"s"+ NL)
Next
message = NL+"end of file: "+origXML

results:
outputStream.WriteText (message)
Call outputStream.Close
Messagebox "Report written to "+outputFile
Exit Sub
errh:
message = Cstr(Err)+": "+Error+Chr(13)
Resume results
End Sub
Sub walkTree ( node As NotesDOMNode)

Dim child As NotesDOMNode
Dim numChildNodes As Integer
Dim nName As String
NL = Chr(13)+Chr(10)

If Not node.IsNull Then
nName = CstrNodeType(node.NodeType)
domParser.Output( nName+" " )

Select Case node.NodeType

Case DOMNODETYPE_DOCUMENT_NODE: ' The Document node
domParser.Output("Name: "+node.Nodename+NL)

If node.ParentNode.IsNull Then
domParser.Output(nName+"s have no parent")
Else
Messagebox "Node cannot have a parent!!", ,nName+" error"
Exit Sub
End If

If node.NextSibling.IsNull And node.PreviousSibling.IsNull Then
domParser.Output(" and no siblings"+NL )
Else
Messagebox "Node cannot have a sibling!!", ,nName+" error"
Exit Sub
End If

Case Else:
domParser.Output("Name: "+node.Nodename+NL)

If node.ParentNode.Isnull Then
Messagebox "Node must have a parent!!", ,nName+" error"
Exit Sub
End If

If node.NextSibling.IsNull And node.PreviousSibling.IsNull Then
domParser.Output(" has no siblings" )
Else
domParser.Output(" has a sibling")
End If

End Select 'node.NodeType

If node.HasChildNodes Then
Set child = node.FirstChild

numChildNodes = node.NumberOfChildNodes

If node.NodeType = DOMNODETYPE_DOCUMENT_NODE Then
domParser.Output(" has "+Cstr(numChildNodes) )
Else
domParser.Output(" and "+Cstr(numChildNodes) )
End If

If numChildNodes = 1 Then
domParser.Output( " child"+NL)
Else
domParser.Output( " children"+NL)
End If

While numChildNodes > 0
Call walkTree(child)
Set child = child.NextSibling
numChildNodes = numChildNodes - 1
Wend
Else
domParser.Output(" and no children"+NL)
End If 'node.HasChildNodes
End If 'Not node.IsNull
End Sub
Function xmlCreate (inFile As String, outFile As String, info As String)

' Open the XML file and create the report file

Dim db As NotesDatabase
Set session = New NotesSession
Set db = session.CurrentDatabase

'create the output file
Set outputStream =session.CreateStream
outputStream.Open (outFile)
outputStream.Truncate

'write report title
outputStream.WriteText (info+Chr(13)+Chr(10))

'open the XML file
Set inputStream = session.CreateStream
inputStream.Open (inFile)
If inputStream.Bytes = 0 Then
info = "XML file "+ inFile+" is empty"
xmlCreate = False
Else
xmlCreate = True
End If

End Function


Function CstrNodeType (currentNode As Long) As String
'Given a node type, convert it to a descriptive string.

nodeCount(currentNode) = nodeCount(currentNode)+1

Select Case currentNode

Case DOMNODETYPE_ELEMENT_NODE: '1
CstrNodeType = "ELEMENT_NODE"

Case DOMNODETYPE_ATTRIBUTE_NODE: '2
CstrNodeType = "ATTRIBUTE_NODE"

Case DOMNODETYPE_TEXT_NODE: '3
CstrNodeType = "TEXT_NODE"

Case DOMNODETYPE_CDATASECTION_NODE: '4
CstrNodeType = "CDATASECTION_NODE"

Case DOMNODETYPE_ENTITYREFERENCE_NODE: '5
CstrNodeType = "ENTITYREFERENCE_NODE"

Case DOMNODETYPE_ENTITY_NODE: '6
CstrNodeType = "ENTITY_NODE"

Case DOMNODETYPE_PROCESSINGINSTRUCTION_NODE: '7
CstrNodeType = "PROCESSINGINSTRUCTION_NODE"

Case DOMNODETYPE_COMMENT_NODE: '8
CstrNodeType = "COMMENT_NODE"

Case DOMNODETYPE_DOCUMENT_NODE: '9
CstrNodeType = "DOCUMENT_NODE"

Case DOMNODETYPE_DOCUMENTTYPE_NODE: '10
CstrNodeType = "DOCUMENTTYPE_NODE"

Case DOMNODETYPE_DOCUMENTFRAGMENT_NODE: '11
CstrNodeType = "DOCUMENTFRAGMENT_NODE"

Case DOMNODETYPE_NOTATION_NODE: '12
CstrNodeType = "NOTATION_NODE"

Case DOMNODETYPE_XMLDECL_NODE: '13
CstrNodeType = "XMLDECL_NODE"
End Select

End Function
Related topics
ParentNode property
FirstChild property
HasChildNodes property
NextSibling property
PreviousSibling property




Library | Support | Terms of use |

Last updated: Monday, October 5, 2009