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 |