Domino 9 und frühere Versionen > ND6: Entwicklung
DOM Parser!
Scorp:
Hi!
Ich hoffe ihr könnt mir helfen. Ich habe eine Agenten, der mir aus einem Document eine XML Datei erstellt und aus dieser durch den DOM Parser einen Baum.
Nun meine Frage kann man aus so einem DOM Baum eine neue XML Datei erstellen lassen??
Axel Janssen temp:
Am sinnvollsten ist wohl xslt (und hier v.a. der xpath Teil).
Such mal in der 6er Hilfe nach xslt.
Und:
http://www.zvon.org/xxl/XSLTutorial/Output/index.html
http://www.w3schools.com/
http://www-106.ibm.com/developerworks/xml/ (suche auf xslt in xml)
Falls du Websphere Application Developer auf deinem Rechner hat, besitzt der einen sehr sinnvollen xslt debugger.
Alternativ kannst du ja auch mit DOM (nicht mit SAX) neue Dokumente erzeugen. Du kannst also den bestehenden DOM Baum auslesen und nach einer bestimmten Logik einen neuen DOM Baum aus dem Ausgelesenen erzeugen.
Theoretisch ist xslt die elegantere Lösung. Mein Kollege Igor und ich haben genau über diese Frage in einem etwas anderen Kontext unterschiedliche Ansichten. Igor favorisiert die DOM Lösung. Mal schauen, ob ich ihn mit xslt schlagen kann. Ich fürchte, daß er der bessere xml-Programmierer ist ::)
Informationen hierzu bekommst du aus der Domino Designer Hilfe oder z.B. diesem Tutorial:
http://www-106.ibm.com/developerworks/edu/x-dw-xudom-i.html?S_TACT=103AMW06&S_CMP=EDU
Source code ist zwar in Java. Dürfte aber möglich sein, das Gesagte auf LotusScript anzuwenden, da die DOM.API selbst ja Sprachenunabhängig ist.
Scorp:
Hi!
Im Moment favorisiere ich auch den DOM Parser, aber ich weiß nicht wie ich diesen erstellten Baum wieder in ein NotesDocument umwandel. Mein Code denn ich dafür hab, funktioniert nicht.
Hier mein Code (noch rel. einfach):
Sub Initialize
Dim view As NotesView
Dim session As New NotesSession
Dim item As NotesItem
Dim domparser As NotesDOMParser
REM Open xml file named after current database
Dim Istream As NotesStream
Set Istream = session.CreateStream
filename = "c:\dxltest\test.xml"
If Not Istream.Open(filename) Then
Messagebox "Cannot open " & filename,, "Error"
Exit Sub
End If
Dim Ostream As NotesStream
Set Ostream = session.CreateStream
Call Ostream.Truncate
'Dim dom As NotesDOMParser
Set domParser=session.CreateDOMParser(IStream,Ostream)
domParser.Process
Call domparser.Serialize()
' PostDOMParse( Source As NotesDOMParser )
Dim doc As NotesDocument
Dim db As NotesDatabase
Set db = session.CurrentDatabase
Dim node As notesdomnode
Set node = domparser.Document
REM Export document as DXL
Dim importer As NotesDXLImporter
Set importer = session.CreateDXLImporter(domparser, db)
Call importer.Process
End Sub
Call importer.process produziert aber folgende Fehlermeldung:
"The Process method can be applied only the first XML processor in an XML pipeline, not in the middle or at the end"
Aber wie soll das gehen, es muß doch erstmal ein DOM Tree in speicher sein bevor ich weiterarbeiten kann, ich bin mit meinem Latein am Ende!
Kann mir jemand helfen?
Axel Janssen temp:
hm bin ich jetzt überfragt. Und hab keine Zeit da jetzt groß rumzuprobieren.
Schau einfach, ob du ein ähnliches Beispiel findest.
Gruß Axel
Hevelmann:
@Scorp
Moin, moin,
die Frage ist natürlich was du genau vor hast. Wenn Du einfach ein XML-file importieren willst sollte dieser Agent reichen:
Sub Initialize
Dim session As NotesSession
Dim db As NotesDatabase
Dim iStream As NotesStream
Dim importer As NotesDXLImporter
Const cFileName = "c:\dxltest\test.xml"
'--------------------------
Set session = New NotesSession
Set db = session.CurrentDatabase
Set Istream = session.CreateStream
If Not Istream.Open( cFilename) Then
Messagebox "Cannot open " & cFilename,, "Error"
Exit Sub
End If
Set importer = session.CreateDXLImporter(iStream, db)
Call importer.Process
End Sub
Gruss Hevelmann
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln