ThomasM: XSLT 1.0 File-Erstellung stoppen

Beitrag lesen

Hallo Julian,

ist es möglich, dass man im XSLT festlegt, wenn bestimmte Kriterien erfüllt sind, es gar kein File erstellt.

In meinem Fall z.B. sollte, wenn der InvoiceType = CreditNote kein XML erstellt werden. -> Nur wenn InvoiceType = INVOIC soll das entsprechende XML erstellt werden.

Ist das grundsätzlich möglich?

Sehe ich für XSLT 1.0 innerhalb des Stylesheets nicht, ggf. durch die Vorverarbeitung mit einer anderen Hostsprache möglich. Etwa via PHP prüfen, ob das gesuchte Element vorkommt und erst dann mit den PHP-XSLT-Techniken transformieren (die können auch nur 1.0).

Ab XSLT 2.0 lässt sich dafür xsl:result-document verwenden:

<xsl:template match="/">
  <xsl:if test="...">
    <xsl:result-document href="output.xml" method="xml" encoding="UTF-8">
      <!-- ... -->
    </xsl:result-document>
  </xsl:if>
</xsl:template>

Bei der Nutzung von Saxon gibt man in solchen Fällen keinen Output-Parameter (-o:output.xml) an und das Stylesheet entscheidet selbst über die Ausgabe. Darüber hinaus lassen sich mit xsl:result-document n Ausgabedateien in einer Transformation erzeugen (sinnvoll für Multidokument-Strukturen wie CHM, DOCX, EPUB usw.).

java -jar saxon9he.jar -s:input.xml -xsl:transform.xsl

Grüße,
Thomas