Autor Thema: DOM Parser!  (Gelesen 3176 mal)

Offline Scorp

  • Junior Mitglied
  • **
  • Beiträge: 52
  • Ich liebe dieses Forum!
DOM Parser!
« am: 22.09.03 - 08:22:08 »
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

  • Gast
Re:DOM Parser!
« Antwort #1 am: 22.09.03 - 09:52:00 »
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.
« Letzte Änderung: 22.09.03 - 15:46:06 von Axel Janssen temp »

Offline Scorp

  • Junior Mitglied
  • **
  • Beiträge: 52
  • Ich liebe dieses Forum!
Re:DOM Parser!
« Antwort #2 am: 23.09.03 - 07:40:45 »
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

  • Gast
Re:DOM Parser!
« Antwort #3 am: 23.09.03 - 09:08:41 »
hm bin ich jetzt überfragt. Und hab keine Zeit da jetzt groß rumzuprobieren.
Schau einfach, ob du ein ähnliches Beispiel findest.

Gruß Axel

Offline Hevelmann

  • Frischling
  • *
  • Beiträge: 43
  • Geschlecht: Männlich
Re:DOM Parser!
« Antwort #4 am: 23.09.03 - 09:42:32 »
@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
« Letzte Änderung: 23.09.03 - 09:43:03 von Hevelmann »

Offline Scorp

  • Junior Mitglied
  • **
  • Beiträge: 52
  • Ich liebe dieses Forum!
Re:DOM Parser!
« Antwort #5 am: 23.09.03 - 09:58:46 »
Jup das is correct! :)

Aber leider will ich vorher die XML Datei Parsen, vielleicht wenn notwendig was ändern und erst danach wieder in Lotus importieren.
Und genau da haberts, mir ist egal ob ich nach dem Parsen erst eine XML Datei habe oder gleich ein Document in Notes.
Ich weis aber weder wie ich das eine mache, noch wie ich das andere mache. :-[

Kann mir dazu jemand weiterhelfen? ???

Axel Janssen temp

  • Gast
Re:DOM Parser!
« Antwort #6 am: 23.09.03 - 10:12:21 »
Kannst du nicht zur Not die im ersten Schritt veränderten xml Dateien als File in ein temporäres Verzeichnis speichern und dann einen weiteren Agenten schreiben, der dieses Verzeichnis durchsucht und dann für alle gefundenen Dateien den code vom Hevelmann ausführt ?

Gruß Axel

Offline Scorp

  • Junior Mitglied
  • **
  • Beiträge: 52
  • Ich liebe dieses Forum!
Re:DOM Parser!
« Antwort #7 am: 23.09.03 - 10:36:02 »
Ginge auch.
Aber wie speichere ich die mit dem DOM Parser veränderte Datei als XML Datei ab?

Der DXLExporter kann das nicht. Mit welcher Routine könnte man das machen?

Axel Janssen temp

  • Gast
Re:DOM Parser!
« Antwort #8 am: 23.09.03 - 13:51:48 »
Wieso  ???

hier ein Beispiel aus den Examples hinter DXLExporter.setOutputMessage:
Den Filepath kannst du dir ja in ein Notes Dokument schreiben und später auslesen.
Code
Sub Initialize
  Dim session As New NotesSession
  Dim db As NotesDatabase
  Set db = session.CurrentDatabase
  
  REM Open xml file named after current database
  Dim stream As NotesStream
  Set stream = session.CreateStream
  filename$ = "c:\dxl\" & Left(db.FileName, Len(db.FileName) - 3) & "xml"
  If Not stream.Open(filename$) Then
    Messagebox "Cannot open " & filename$,, "Error"
    Exit Sub
  End If
  Call stream.Truncate
  
  REM Create note collection for current database
  Dim nc As NotesNoteCollection
  Set nc = db.CreateNoteCollection(False)
  Call nc.SelectAllDesignElements(True)
  Call nc.BuildCollection
  
  REM Export note collection as DXL
  Dim exporter As NotesDXLExporter
  Set exporter = session.CreateDXLExporter(nc)
  Call exporter.SetOutput(stream)
  Call exporter.Process
End Sub 

Offline Scorp

  • Junior Mitglied
  • **
  • Beiträge: 52
  • Ich liebe dieses Forum!
Re:DOM Parser!
« Antwort #9 am: 23.09.03 - 15:31:06 »
Kann ja sein das ich jetzt irgendwie nen Brett vorm Kopf hab, aber NotesNotecollection nimmt sich alle (z.b) Designelement und gibt sie dann dem Exporter, aber wie stell ich sicher das er nur die designelemente vom z.B. dem Parser nimmt?
 
Ich mein ich will ja nach dem ich den Parser durchlaufen lassen hab, nur diese veränderte Datei wieder in eine XML Datei umwandeln.

NotesNotecollection gibt mir doch die komplette DB zurück oder seh ich das falsch

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz