Autor Thema: DOM parser operation failed  (Gelesen 2920 mal)

Offline Johnson

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
DOM parser operation failed
« am: 27.05.08 - 16:09:45 »
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?

Code
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
« Letzte Änderung: 27.05.08 - 17:34:09 von Johnson »
Gruß
Johnson

Offline Johnson

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: DOM parser operation failed
« Antwort #1 am: 27.05.08 - 17:32:50 »
Ich haaaabs!!!

Hab nochmal im Forum gesucht und siehe da: http://atnotes.de/index.php?topic=32135.0
Wo war der Threat vorhin?

Der NotesDOMParser validiert das XML, das er als Input bekommt.

Das Problem entstand bereits bei der Erstellung des XMLs:
Der NotesDOMExporter gibt immer ein XML zurück, das sich auf ein Schema bezeiht.
Code
<!DOCTYPE document SYSTEM 'xmlschemas/domino_x_x_x.dtd'>

Setzt man die Eigenschaft OutputDOCTYPE des NotesDOMExporter-Objektes auf False, so wird das unterbunden.

Und siehe da.... es funkt.
« Letzte Änderung: 27.05.08 - 17:35:12 von Johnson »
Gruß
Johnson

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz