Hallo zusammen,
ich mache grad ein bisschen mit XML und Lotus Notes rum. Das läuft mehr oder weniger erfolgreich.
Dazu habe ich mir ein Beispiel geholt und es für meine Zwecke etwas angepasst.
Ich habe hier eine Funktion
ParseDXL, der ich ein NotesDocument-Objekt übergebe. Die Funktion sollte jetzt die Eigenschaften aller XML-Elemente ausgeben.
Also erstelle ich ein NotesStream, dass das Ergebniss des NotesDXLExporters aufnimmt (s. Code "2. XML stream").
Das NotesStream-Objekt wird einem NotesDOMParser-Objekt als Input übergeben (s. Code "3. parse"). Beim Aufruf der Methode
Parse bekomme ich den Fehler "DOM parser operation failed".
Das passiert auch, wenn ich statt eines NotesStreams einen String mit dem XML-Inhalt übergebe.
Kann mir da jemand weiterhelfen?
Function ParseDXL(doc As NotesDocument) As Boolean
Dim s As NotesSession
Dim db As NotesDatabase
Dim nde As NotesDXLExporter
Dim ns_input As NotesStream
Dim nddn As NotesDOMDocumentNode
Dim ndp As NotesDOMParser
' 1. initialize
Set db = doc.ParentDatabase
Set s = db.Parent
' 2. XML stream
Set ns_input = s.CreateStream()
Set nde = s.CreateDXLExporter()
Call nde.SetInput(doc)
Call nde.SetOutput(ns_input)
Call nde.Process
' 3. parse
Set ndp = s.CreateDOMParser(ns_input)
Stop
Call ndp.Parse
Set nddn = ndp.Document
' 4. get properties
Stop
Call WalkThroughDXLTree(nddn)
End Function
Sub WalkThroughDXLTree(ndn As NotesDOMNode)
Dim lng_child As Long
Dim child As NotesDOMNode
Dim str_msg As String
If ndn.IsNull Then Exit Sub
str_msg = String$(100, "-")
str_msg = str_msg & Chr(10) & "NodeName: " & ndn.NodeName
str_msg = str_msg & Chr(10) & "NodeType: " & ndn.NodeType
str_msg = str_msg & Chr(10) & "LocalName: " & ndn.LocalName
str_msg = str_msg & Chr(10) & "Prefix: " & ndn.Prefix
str_msg = str_msg & Chr(10) & "NodeValue: " & ndn.NodeValue
str_msg = str_msg & Chr(10) & "NumberOfChildNodes: " & ndn.NumberOfChildNodes
Print str_msg
Set child = ndn.FirstChild
lng_child = ndn.NumberOfChildNodes
While lng_child > 0
Call WalkThroughDXLTree(child)
Set child = child.NextSibling
lng_child = lng_child - 1
Wend
End Sub