Tach!
Meine XSLT-Versuche liegen nun auch schon wieder eine Weile zurück, und ich werde dir vielleicht nicht wirklich weiterhelfen aber hoffentlich eine grobe Richtung vorgeben können.
Versuche, die Werte einzeln zu schreiben endeten stets erfolglos mit der exception, das ich nicht mehrfach in eine Datei schreiben kann (Cannot write more than one result doc to the same URI).
<xsl:template match="/">
<xsl:for-each select="//Details">
<xsl:result-document href="Pos.csv" format="csv">
[...]
</xsl:result-document>
</xsl:for-each>
</xsl:template>
Kommt die Exception bei dieser Konstruktion, also bei result-document innerhalb von foreach? Dann ist das mit dem result-document vermutlich so ähnlich wie beim Erstellen einer Variable mit variablem Inhalt. Man darf das sinngemäß nicht so tun:
if (bedingung) then z= x else z= y
weil dabei das z= zweimal vorkommt. Man muss das andersrum notieren
z= if (bedingung) then x else y
also das z= nach außen bringen und den variablen Inhalt nach innen.
Im großen und ganzen frag ich eigentlich nur, wie schreibe ich Werte nacheinander in eine Datei, und füge zwischen jedem Wert ein eigenes Zeichen ein, und geht das überhaupt?
Naja, so imperativ, wie du das formulierst, geht das nicht (besonders gut). Du musst die Kontrolle über das Gesamtgeschehen abgeben (beziehungsweise bekommst sie bei XSLT gar nicht erst), und kannst immer nur die Regel definieren, die auf ein bestimmtes Element angewendet werden soll.
Das Root-Element kann/sollte natürlich auch eine Behandlung erfahren. Da musst du vermutlich nur das result-document notieren und darin ein apply-templates (und vielleicht davor und danach noch mehr, was einmalig am Anfang und am Ende ausgeführt werden soll, wie zum Beispiel eine Feldnamen-Zeile). Für die anderen Elemente erstellst du eigene Templates. Wenn das wieder nur Container-Elemente sind, dann ein weiteres apply-templates darin anwenden.
Im Prinzip wie bei diesem Beispiel: http://de.selfhtml.org/xml/darstellung/xsltbeispiele.htm#textbeispiel
Wenn du in deinem XML-Baum soweit ab-(oder auf-)gestiegen bist, dass du nur noch Templates für Blätter schreiben kannst, dann gib jeweils den Inhalt des Blattes aus mit einem Komma danach, außer beim letzten Element (der CSV-Zeile). (Anführungszeichen um die Werte zu notieren und Anführungszeichen in ihnen drin zu verdoppeln wäre auch nicht verkehrt, um den CSV-Regeln in jedem Fall zu entsprechen.)
dedlfix.