Autor Thema: Wieder mal DXL via XSL nach XML  (Gelesen 7463 mal)

Offline azique

  • Frischling
  • *
  • Beiträge: 40
Wieder mal DXL via XSL nach XML
« am: 02.07.07 - 10:23:49 »
Hallo Forum,

ich weiß, dass es hier im Forum bereits einige Beiträge zu diesem Thema (oder in abgewandelter Form) gibt - aber ich komme einfach nicht weiter. Selbst wenn ich Schritt für Schritt die IBM-Tutorials (http://www.ibm.com/developerworks/lotus/library/dwintegration-dxl/index.html oder http://www.ibm.com/developerworks/lotus/library/ls-LS_XML_pt2/index.html ) nachbaue, bekomme ich am Ende die Fehlermeldung "XSL transform operation failed" sobald ich process() oder transform() des NotesXSLTranformer aufrufe.

Ich verstehe nicht, warum ich diesen Fehler erhalten - denn wenn ich die exportierte .dxl-Datei (die ich mit dem LotusDXLExporter erzeuge) manuell mit einer stylesheet-Angabe ergänze ( <?xml-stylesheet type="text/xsl" href="layout.xsl"?> ), wird es im Browser korrekt dargestellt...

Jetzt dachte ich, vielleicht liegt es daran, dass wenn ich die Streams einlese, der .pointer am Ende steht und der Transformer somit keine Daten erhält. da am Ende ja nichts mehr kommt - also habe ich vor aufrufen der jeweiligen process-Methoden ein stream.pointer = 0 gemacht.

Gebracht hat es nichts und da ich jetzt wirklich langsam durchdrehe, freue ich mich auf euren kompetenten Rat  :)

Danke schonmal
verbindlichst,
Johannes Pietsch


____________________
Ausbildung zum Fachinformatiker/Anwendungsentwicklung am 05.02.07 erfolgreich beendet.
Datenbankentwicklung für Lotus Notes 6.5, 7.0

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: Wieder mal DXL via XSL nach XML
« Antwort #1 am: 02.07.07 - 10:33:36 »
was sagt den die Fehlermeldung (log) des Transformers? 
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Offline azique

  • Frischling
  • *
  • Beiträge: 40
Re: Wieder mal DXL via XSL nach XML
« Antwort #2 am: 02.07.07 - 10:41:21 »
Ahja - da das Script aufgrund des Fehlers immer ausgestiegen ist, bin ich nie zum loggen gekommen - also ein Resume next rein.

Ergebnis:
<?xml version='1.0'?>
<XSLTransformerLog>
<fatalerror source='stylesheet' line='1' column='45'>An exception occurred! Type:TranscodingException, Message:Could not create a converter for encoding: ISO-8859-15</fatalerror>
<fatalerror>Error detected when processing stylesheet</fatalerror>
</XSLTransformerLog>

danke für den Tipp - ich schau mir die entsprechende Stelle mal an
verbindlichst,
Johannes Pietsch


____________________
Ausbildung zum Fachinformatiker/Anwendungsentwicklung am 05.02.07 erfolgreich beendet.
Datenbankentwicklung für Lotus Notes 6.5, 7.0

Offline azique

  • Frischling
  • *
  • Beiträge: 40
Re: Wieder mal DXL via XSL nach XML
« Antwort #3 am: 02.07.07 - 10:49:07 »
Wunderbar!

Was so eine zusätzliche 5 ausmacht - laut wikipedia (http://de.wikipedia.org/wiki/ISO-8859-15 ) ist -15 zwar gleichbedeutend mit -1 aber ok. Wenn Notes das nicht mag.

Besten Dank umi!
verbindlichst,
Johannes Pietsch


____________________
Ausbildung zum Fachinformatiker/Anwendungsentwicklung am 05.02.07 erfolgreich beendet.
Datenbankentwicklung für Lotus Notes 6.5, 7.0

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Wieder mal DXL via XSL nach XML
« Antwort #4 am: 02.07.07 - 11:14:29 »
8859-15 ist 8859-1 plus dem Euro-Zeichen.
Und das Java in Domino 6 dürfte den 15er-Zeichensatz nicht kennen.
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Wieder mal DXL via XSL nach XML
« Antwort #5 am: 02.07.07 - 11:27:03 »
Kannst du ein bischen mehr von deinem Code posten?
Du kannst das Charset sicher an einer Stelle explizit angeben. Dann funktioniert das auch.
Bitte poste mal deinen code, wie du die Streams öffnest von dem Zeug, dass du konvertiert.
Character Encoding kann definitiv nervig sein. Ich habs aber bisher immer in den Griff bekommen.

Das kann z.B. so aussehen (eben in der Notes Hilfe gefunden):
Code
 String inPath = "c:\\StreamFiles\\characters.trk";
      String charset = "ISO-8859-4";
      session.setConvertMIME(false);
      Stream inStream = session.createStream();
      if (inStream.open(inPath, charset)) {
Falls ISO-8859-15 von Java1.3 tatsächlich nicht unterstützt würde (was ich nicht vermute), kannst du das auch als ISO-8859-1 einlesen, solange du keine $ Symbole verwendest. Ansonsten kann das ein bischen schwieriger werden.
« Letzte Änderung: 02.07.07 - 11:46:56 von Axel Janssen »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline azique

  • Frischling
  • *
  • Beiträge: 40
Re: Wieder mal DXL via XSL nach XML
« Antwort #6 am: 02.07.07 - 11:36:33 »
ich musste nur im Stylesheet die encoding=""-Angabe anpassen, dann hat's geklappt.

Aber will euch den Code nicht vorenthalten. Mir persönlich gefällt er nicht besonders, da ich das irgendwie unstrukturiert und nicht nachvollziehbar finde, wenn ich exporter.process() aufrufe, dass dann automatisch das Ergebnis über den XSLTransformer (der eine Zeile drüber steht) ins Datensystem geschrieben wird... aber so ist das wohl mit diesem pipelining

Code
private function run()
		Dim session 		As NotesSession
		Dim database		As NotesDatabase
		Dim dxlExporter 	As NotesDXLExporter
		Dim xslTransformer 	As NotesXSLTransformer
		Dim stream		As NotesStream
		Dim tmp			As NotesStream
		Dim coll		As NotesDocumentCollection
		Dim xsl		As NotesStream
		
		Dim html_path 			As String
		Dim dxlToHtmlXsl_path 	As String
		
		Set session 	= New NotesSession
		Set database	= session.CurrentDatabase
		
		html_path = "D:\daten\entwicklung\xml\vertragsverwaltung\vertraege.html"
		dxlToHtmlXsl_path = "D:\Daten\Entwicklung\XML\Vertragsverwaltung\dxl-html.xsl"
		
		' Dokumente ermitteln
		Set coll = ermittle( database ) ' holt sich momentan einfach die markierten Dokumente
		Set tmp = session.CreateStream() ' der dxl-Stream für den XSLTransformer
		
		' DXL-Daten erzeugen
		Set dxlExporter = session.CreateDXLExporter( coll, tmp )
		
		Set xsl 		= session.CreateStream()
		Set stream 	= session.CreateStream()
		call stream.Open( html_path )
		Call stream.Truncate()
		
		call xsl.Open( dxlToHtmlXsl_path )

		Set xslTransformer = session.CreateXSLTransformer( dxlExporter, xsl, stream )
		Call dxlExporter.process()
		Call stream.Close
end function

Ich hoffe, ich hab beim Aufräumen (unnötige Zeilen, Kommentare) keine wichtigen Sachen mit entfernt ;)

edit: bin im Moment erst mal zufrieden, dass es geht - werde später versuchen, es ein wenig auseinander zu ziehen und besser zu strukturieren. Ich wollte eigentlich für jeden Schritt ne eigene Methode:
Code
call HTML speichern( XML in HTML umwandeln( DXL in XML umwandeln( Dokumente in dxl umwandeln( Dokumente ermitteln ) ) ) )
Aber ich bin da mit den Streams durcheinander gekommen, also hab ich alles in eine Methode gepackt.

« Letzte Änderung: 02.07.07 - 11:39:55 von azique »
verbindlichst,
Johannes Pietsch


____________________
Ausbildung zum Fachinformatiker/Anwendungsentwicklung am 05.02.07 erfolgreich beendet.
Datenbankentwicklung für Lotus Notes 6.5, 7.0

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Wieder mal DXL via XSL nach XML
« Antwort #7 am: 02.07.07 - 11:53:18 »
Ich find das ok. Du solltest allerdings alle Streams schliessen.
Also auch am Ende xsl.close() und tmp.close().
Und besseres Errorhandling.

Wenn du das mit Streams auseinanderziehst, hast du immer das Problem, dass du die Streams in den Funktionen zurückgeben mußt oder die in eine globale Variable schreiben.

Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline azique

  • Frischling
  • *
  • Beiträge: 40
Re: Wieder mal DXL via XSL nach XML
« Antwort #8 am: 09.07.07 - 17:13:56 »
Hab es letztlich so belassen und noch ein paar schöne Fehlerbehandlungen drum herumgebaut.

Jetzt habe ich aber 2 Fragen:

Zum Einen: Wie kann ich Antwortdokumente (oder beliebige andere irgendwie mit dem Dokument verknüpfte Dokumente) mit exportieren, sodass sie als Unterelement im xml-Baum auftauchen:
Hier würde dxl 3 Dokumente generieren, ich will aber nur eins
Code
<doc>
<feld1></feld1>
<antworten>
<antwort>
<feld1></feld1>
</antwort>
<antwort>
<feld1></feld1>
<feld2></feld2>
</antwort>
</antworten>
</doc>

Ich dachte mir, dass ich das Hauptdokument in einen Stream exportiere - und die Antwortdokumente per SAX- oder DOM-Parser "dazwischenschiebe" - klingt abenteuerlich und ich hab noch keine Ahnung, ob das überhaupt funktioniert.

Der zweite Punkt: wie stelle ich die Datumswerte schön dar? Laut w3school.com (http://www.w3schools.com/schema/schema_dtypes_date.asp) gibt es hier ja Möglichkeiten, bestimmte Elemente als Datum zu deklarieren - aber was, wenn das vorgegebene Format ganz anders aussieht, als hier beschrieben (oder zumindest nicht yyy-mm-dd lautet)? Wie bekomme ich aus 20070628T000000,00+02 ein 28.06.2007? Mein erster Gedanke war ein Template dafür herzurichten, aber wie dann weiter? Den String zerteilen?

Freue mich bestimmt über jede Antwort :)
verbindlichst,
Johannes Pietsch


____________________
Ausbildung zum Fachinformatiker/Anwendungsentwicklung am 05.02.07 erfolgreich beendet.
Datenbankentwicklung für Lotus Notes 6.5, 7.0

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Wieder mal DXL via XSL nach XML
« Antwort #9 am: 09.07.07 - 19:56:27 »
Es stellt sich für mich langsam die Frage, warum Du das xml nicht einfach mit einem Agenten rausschreibst.

Dafür müsstest Du einfach nur eine Ansicht durchiterieren und einen String aufbauen und diesen String dann in ein file schreiben.
Code
Dim strRes as String

strRes =|<?xml version="1.0" encoding="ISO-8859-1">| & chr$(13) & chr$(10) & "<docs>" & chr$(13) & chr$(10) 


while doc is nothing
 strRes=strRes & "<doc>" & chr$(13) & chr$(10)
 strRes = strRes & "<feld1>" + doc.getItemValue("feld1")(0) & "</feld1>"  & chr$(13) & chr$(10)
...
 strRes=strRes & "</doc>" & chr$(13) & chr$(10)
 set doc = vw.getNextDocument(doc)
wend

strRes = strRes & "</docs>" & chr$(13) & chr$(10)

Und den String dann einfach in ein File schreiben.
Ich glaub, dass du so die Sache viel einfacher löst als mit xslt.  ;)

Xslt wird einfach schnell sehr kompliziert.

Gruß Axel
« Letzte Änderung: 09.07.07 - 19:58:09 von Axel Janssen »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline azique

  • Frischling
  • *
  • Beiträge: 40
Re: Wieder mal DXL via XSL nach XML
« Antwort #10 am: 10.07.07 - 09:47:24 »
 ;D genauso habe ich es bisher gemacht. Aber da ich mich mehr mit xsl beschäftigt habe, dachte ich, kann doch nur von Vorteil sein, wenn Notes das für mich so umwandelt, wie ich es will.

Aber du hast natürlich Recht - ich werde jetzt mein xml selber generieren (per Ansicht oder mit meiner Methode toXml(), die die Antwortdokumente mit Aufruft, wie bisher) und diese Daten dann für hübsche HTML-Exporte verwenden.

Danke, dass du mich wieder in vernünftige Bahnen geschubst hast  ;D
Denn das XSL für die dxl-Dateien ist vom Kunden wohl nicht so leicht zu modifizieren, wie für eine gesäuberte xml-Datei, wo nur das drin ist, was auch wichtig ist.

Bleibt die Sache mit dem Datum - aber das kann ich ja per LS formatieren, wie ich möchte.
verbindlichst,
Johannes Pietsch


____________________
Ausbildung zum Fachinformatiker/Anwendungsentwicklung am 05.02.07 erfolgreich beendet.
Datenbankentwicklung für Lotus Notes 6.5, 7.0

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz