Du wärest ein Gott.
Mit Religion hat das nix zu tun. Es ist nur ein bischen Arbeit. Trainier halt manchmal ein wenig. Kann das auch öffentlich tun. Angesichts meiner Tagessätze rechnet sich das sowieso.
OK.
Das ist jetzt eine Art proof of concept. Es kann einiges verbessert werden.
Der Agent holt sich zur Zeit eine Datei C:/dxl/hello.xml
Eigentlich müßte er über ein Verzeichnis iterieren und die einzelnen dxl-Dateien da rausholen.
Nicht so schwierig, das zu programmieren.
Der Agent holt sich zur Zeit eine Datei C:/dxl/hello.xsl
Besser wäre es, wenn das xsl in einem Konfig-Dokument gespeichert wäre. Auch das sollte nicht so schwierig zu programmieren sein.
Der Agent schreibt eine Datei C:/dxl/hello.html
Sowohl beim generierten html (ist im .xsl) als auch im Aufbau der xsl selbst, kann noch eine Menge verbessert werden.
Die Errormeldungen des aus der Hilfe kopierten Agenten sind nicht so das Gelbe. Da müßte noch geguckt werden, inwieweit da insbesondere xsl-Fehler besser ausgegeben werden können. Das warn bischen nervig. Hab kein Tool benutzt (hätte Sinn gemacht) sondern rein Notes.
Ich denke die Streams sollten besser mit einem close geschlossen werden.
Der Agent:
Options:
Option Public
Option Declare
%INCLUDE "lsxbeerr.lss"
Initialize:
Sub Initialize
On Error lsERR_NOTES_XSLT_INPUT_OBJECT Goto err_IN
On Error lsERR_NOTES_XSLT_OUTPUT_OBJECT Goto err_OUT
On Error lsERR_NOTES_XSLT_STYLESHEET_OBJECT Goto err_SS
Dim session As New NotesSession
Dim filename As String
Dim pathname As String
filename$ = "hello"
pathname$ = "c:\dxl\"
Dim XML_in As NotesStream ' input file
Set XML_in=session.CreateStream
If Not XML_in.Open(pathname$ & filename$ & ".xml") Then
Messagebox "Cannot open " & filename$,, "XML file error"
Exit Sub
End If
If XML_in.Bytes = 0 Then
Messagebox filename$ & " does not exist or is empty",, "XML file error"
Exit Sub
End If
Dim XSL_ss As NotesStream ' style sheet
Set XSL_ss=session.CreateStream
If Not XSL_ss.Open(pathname$ & filename$ & ".xsl") Then
Messagebox "Cannot open " & filename$,, "XSL file error"
Exit Sub
End If
Dim XML_out As NotesStream ' output file
Set XML_out=session.CreateStream
If Not XML_out.Open(pathname$ & filename$ & ".html") Then
Messagebox "Cannot create " & filename$,, "HTML file error"
Exit Sub
End If
XML_out.Truncate
Dim transformer As NotesXSLTransformer
Set transformer=session.CreateXSLTransformer(XML_in, XSL_ss, XML_out)
transformer.Process
Exit Sub
err_IN:
Messagebox "XSL Input error", , "XSLTransformer Process"
Exit Sub
err_OUT:
Messagebox "XSL Output error", , "XSLTransformer Process"
Exit Sub
err_SS:
Messagebox "Style Sheet error", , "XSLTransformer Process"
Exit Sub
End Sub
xsl [OBSOLET, bessere Version s.u.)]
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:d="http://www.lotus.com/dxl">
<xsl:output method="html"/>
<xsl:template match="/">
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<table>
<xsl:apply-templates/>
</table>
</BODY>
</HTML>
</xsl:template>
<xsl:template match="/d:document">
<xsl:for-each select="@*">
<tr>
<td>
document metadata
</td>
<td>
<xsl:value-of select="name()"/>
</td>
<td>
<xsl:value-of select="."/>
</td>
</tr>
</xsl:for-each>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="/d:document">
<xsl:for-each select="@*">
<tr>
<td>
document metadata
</td>
<td>
<xsl:value-of select="name()"/>
</td>
<td>
<xsl:value-of select="."/>
</td>
</tr>
</xsl:for-each>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="/d:document/d:noteinfo">
<xsl:for-each select="@*">
<tr>
<td>
noteinfo metadata
</td>
<td>
<xsl:value-of select="name()"/>
</td>
<td>
<xsl:value-of select="."/>
</td>
</tr>
</xsl:for-each>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="/d:document/d:noteinfo/d:created/d:datetime">
<xsl:for-each select="@*">
<tr>
<td>
noteinfo created metadata
</td>
<td>
<xsl:value-of select="name()"/>
</td>
<td>
<xsl:value-of select="."/>
</td>
</tr>
</xsl:for-each>
<tr>
<td>
noteinfo created metadata value
</td>
<td>
<xsl:value-of select="text()"/>
</td>
</tr>
</xsl:template>
<xsl:template match="/d:document/d:noteinfo/d:modified/d:datetime">
<xsl:for-each select="@*">
<tr>
<td>
noteinfo modified metadata
</td>
<td>
<xsl:value-of select="name()"/>
</td>
<td>
<xsl:value-of select="."/>
</td>
</tr>
</xsl:for-each>
<tr>
<td>
noteinfo modified metadata value
</td>
<td>
<xsl:value-of select="text()"/>
</td>
</tr>
</xsl:template>
<xsl:template match="/d:document/d:noteinfo/d:revised/d:datetime">
<xsl:for-each select="@*">
<tr>
<td>
noteinfo revised metadata
</td>
<td>
<xsl:value-of select="name()"/>
</td>
<td>
<xsl:value-of select="."/>
</td>
</tr>
</xsl:for-each>
<tr>
<td>
noteinfo revised metadata value
</td>
<td>
<xsl:value-of select="text()"/>
</td>
</tr>
</xsl:template>
<xsl:template match="/d:document/d:noteinfo/d:lastaccessed/d:datetime">
<xsl:for-each select="@*">
<tr>
<td>
noteinfo lastaccessed metadata
</td>
<td>
<xsl:value-of select="name()"/>
</td>
<td>
<xsl:value-of select="."/>
</td>
</tr>
</xsl:for-each>
<tr>
<td>
noteinfo lastaccessed metadata value
</td>
<td>
<xsl:value-of select="text()"/>
</td>
</tr>
</xsl:template>
<xsl:template match="/d:document/d:noteinfo/d:addedtofile/d:datetime">
<xsl:for-each select="@*">
<tr>
<td>
noteinfo addedtofile metadata
</td>
<td>
<xsl:value-of select="name()"/>
</td>
<td>
<xsl:value-of select="."/>
</td>
</tr>
</xsl:for-each>
<tr>
<td>
noteinfo addedtofile metadata value
</td>
<td>
<xsl:value-of select="text()"/>
</td>
</tr>
</xsl:template>
<xsl:template match="/d:document/d:updatedby/d:name">
<xsl:for-each select="@*">
<tr>
<td>
updatedby metadata
</td>
<td>
<xsl:value-of select="name()"/>
</td>
<td>
<xsl:value-of select="."/>
</td>
</tr>
</xsl:for-each>
<tr>
<td>
updatedby metadata value
</td>
<td>
<xsl:value-of select="text()"/>
</td>
</tr>
</xsl:template>
<xsl:template match="d:document/d:item">
<tr>
<td class="key">
<xsl:value-of select="@name"/>
</td>
<xsl:apply-templates/>
</tr>
</xsl:template>
<xsl:template match="/d:document/d:item/d:text">
<td class="value">
<xsl:value-of select="text()"/>
</td>
</xsl:template>
<xsl:template match="/d:document/d:item/d:text">
<td class="text-value">
<xsl:value-of select="text()"/>
</td>
</xsl:template>
<xsl:template match="/d:document/d:item/d:textlist/d:text">
<td class="multi-text-value">
<xsl:value-of select="text()"/>
</td>
</xsl:template>
<xsl:template match="/d:document/d:item/d:number">
<td class="number-value">
<xsl:value-of select="text()"/>
</td>
</xsl:template>
<xsl:template match="/d:document/d:item/d:datetime">
<td class="text-value">
<xsl:value-of select="text()"/>
</td>
</xsl:template>
<xsl:template match="/d:document/d:item/d:datetimelist/d:datetimepair/d:datetime">
<td class="date-time-list">
<xsl:value-of select="text()"/>
</td>
</xsl:template>
<xsl:template match="/d:document/d:item/d:rawitemdata">
<td class="raw-item-value">
type:<xsl:value-of select="@type"/>
</td>
<td class="raw-item-value">
<xsl:value-of select="text()"/>
</td>
</xsl:template>
<!--
<document xmlns='http://www.lotus.com/dxl' version='7.0' maintenanceversion='2.0'
replicaid='C1257566003E4722' form='Server'>
<noteinfo noteid='1476' unid='E2B84EF46C02A370C12575930045E264' sequence='1'>
<created><datetime dst='true'>20090409T144319,40+02</datetime></created>
<modified><datetime dst='true'>20090409T144702,93+02</datetime></modified>
<revised><datetime dst='true'>20090409T144702,92+02</datetime></revised>
<lastaccessed><datetime dst='true'>20090409T144702,93+02</datetime></lastaccessed>
<addedtofile><datetime dst='true'>20090409T144702,93+02</datetime></addedtofile></noteinfo>
<updatedby><name>CN=Test User/O=Test</name></updatedby>
-->
</xsl:stylesheet>