Ich führe diesen Code, wo ich die Datetime in '@datetime' nach meinen Bedürfnissen formatiere. Dieser Code funktioniert perfekt.XSLT 1.0 Erstellen von Vorlagen und Variablen
<?xml version ='1.0' encoding='UTF-8'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:strip-space elements="*"/>
<xsl:template match ="transcript/call">
<xsl:variable name="datestr" select="substring-before(@datetime,' UTC')" />
<xsl:variable name="MMM" select="format-number(string-length(substring-before('JanFebMarAprMayJunJulAugSepOctNovDec',substring(substring($datestr,1,3),1,3))) div 3 + 1,'00')"/>
<xsl:variable name="D" select="format-number(floor(substring($datestr,5,1)),'00')" />
<xsl:variable name="YYYY" select="substring($datestr,8,4)" />
<xsl:variable name="hh" select="substring($datestr,13,2)" />
<xsl:variable name="mm" select="substring($datestr,16,2)" />
<xsl:variable name="ss" select="substring($datestr,19,2)" />
<!-- <xsl:variable name="DateTimeFormatted" select="concat($YYYY,'-', $MMM, '-', $D, 'T', $hh, ':', $mm, ':', $ss, 'Z')" /> -->
Your chat transcript from Univ100 @ Student dated <xsl:value-of select="concat($YYYY,'-', $MMM, '-', $D, 'T', $hh, ':', $mm, ':', $ss, 'Z')" />
-------------------------------------------------------------------------------------
</xsl:template>
<xsl:template match ="transcript/say">
<xsl:if test ="./@source ='customer'">
[<xsl:value-of select ="@datetime" />] <xsl:value-of select ="@name" /> says: <xsl:value-of select ="." disable-output-escaping="yes" /></xsl:if>
<xsl:if test ="./@source ='agent'">
[<xsl:value-of select ="@datetime" />] Student Officer says: <xsl:value-of select ="." disable-output-escaping="yes" /></xsl:if>
<xsl:if test ="./@source ='system'">
<xsl:if test ="./@display ='true'">
[<xsl:value-of select ="@datetime" />] System: <xsl:value-of select ="." disable-output-escaping="yes" />
</xsl:if>
</xsl:if>
</xsl:template>
<xsl:template match ="transcript/url">
<xsl:if test ="./@source ='customer'">
[<xsl:value-of select ="@datetime" />] <xsl:value-of select ="@name" /> sends: <xsl:value-of select ="." disable-output-escaping="yes" />
</xsl:if>
<xsl:if test ="./@source ='agent'">
[<xsl:value-of select ="@datetime" />] Student Officer sends: <xsl:value-of select ="." disable-output-escaping="yes" />
</xsl:if>
<xsl:if test ="./@source ='system'">
<xsl:if test ="./@display ='true'">
[<xsl:value-of select ="@datetime" />] System: <xsl:value-of select ="." disable-output-escaping="yes" />
</xsl:if>
</xsl:if>
</xsl:template>
<xsl:template match ="transcript/event">
</xsl:template>
<xsl:template match ="parameters">
Univ100
</xsl:template>
</xsl:stylesheet>
Allerdings, wenn ich die folgenden Änderungen vornehmen, um eine andere Vorlage für die Formatierung zu machen, die einen Parameter akzeptiert, und gibt den formatierten String, also kann ich es mehrfach verwenden und bei Bedarf in Dieses Chat-Protokoll.
Ich habe die folgenden Änderungen vorgenommen, aber der Code funktioniert nicht.
<?xml version ='1.0' encoding='UTF-8'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:strip-space elements="*"/>
<xsl:template name="formatter">
<xsl:param name="datestr"/>
<!-- <xsl:variable name="datestr" select="substring-before(@datetime,' UTC')" /> -->
<xsl:variable name="MMM" select="format-number(string-length(substring-before('JanFebMarAprMayJunJulAugSepOctNovDec',substring(substring($datestr,1,3),1,3))) div 3 + 1,'00')"/>
<xsl:variable name="D" select="format-number(floor(substring($datestr,5,1)),'00')" />
<xsl:variable name="YYYY" select="substring($datestr,8,4)" />
<xsl:variable name="hh" select="substring($datestr,13,2)" />
<xsl:variable name="mm" select="substring($datestr,16,2)" />
<xsl:variable name="ss" select="substring($datestr,19,2)" />
<!-- <xsl:variable name="DateTimeFormatted" select="concat($YYYY,'-', $MMM, '-', $D, 'T', $hh, ':', $mm, ':', $ss, 'Z')" /> -->
<xsl:value-of select="concat($YYYY,'-', $MMM, '-', $D, 'T', $hh, ':', $mm, ':', $ss, 'Z')" />
</xsl:template>
<xsl:template match ="transcript/call">
<xsl:variable name="returnValue">
<xsl:call-template name="formatter">
<xsl:with-param name="datestr" select="@datetime"></xsl:with-param>
</xsl:call-template>
</xsl:variable>
Your chat transcript from Univ100 @ Student dated <xsl:value-of select="$returnValue"/>
-------------------------------------------------------------------------------------
</xsl:template>
<xsl:template match ="transcript/say">
<xsl:if test ="./@source ='customer'">
[<xsl:value-of select ="@datetime" />] <xsl:value-of select ="@name" /> says: <xsl:value-of select ="." disable-output-escaping="yes" /></xsl:if>
<xsl:if test ="./@source ='agent'">
[<xsl:value-of select ="@datetime" />] Student Officer says: <xsl:value-of select ="." disable-output-escaping="yes" /></xsl:if>
<xsl:if test ="./@source ='system'">
<xsl:if test ="./@display ='true'">
[<xsl:value-of select ="@datetime" />] System: <xsl:value-of select ="." disable-output-escaping="yes" />
</xsl:if>
</xsl:if>
</xsl:template>
<xsl:template match ="transcript/url">
<xsl:if test ="./@source ='customer'">
[<xsl:value-of select ="@datetime" />] <xsl:value-of select ="@name" /> sends: <xsl:value-of select ="." disable-output-escaping="yes" />
</xsl:if>
<xsl:if test ="./@source ='agent'">
[<xsl:value-of select ="@datetime" />] Student Officer sends: <xsl:value-of select ="." disable-output-escaping="yes" />
</xsl:if>
<xsl:if test ="./@source ='system'">
<xsl:if test ="./@display ='true'">
[<xsl:value-of select ="@datetime" />] System: <xsl:value-of select ="." disable-output-escaping="yes" />
</xsl:if>
</xsl:if>
</xsl:template>
<xsl:template match ="transcript/event">
</xsl:template>
<xsl:template match ="parameters">
Univ100
</xsl:template>
</xsl:stylesheet>
Ich bin sehr neu 1,0 bis XSLT und ich habe daran zu arbeiten, wie ich keine andere Wahl haben zu ändern oder die Version zu aktualisieren, kann ich arbeiten nur auf reine XSLT 1.0. Dies ist die einzige Kontrolle, die ich über das Projekt habe, ich habe keinen Zugriff auf den DB-Server, die XML-Datei, die diesen XLST oder irgendeinen anderen Aspekt des Projekts verwendet.
Jede Hilfe wäre willkommen.
Bitte zeigen Sie uns ein Beispiel für die XML-Eingabe und die erwartete Ausgabe - siehe: [mcve]. Wenn Sie keinen direkten Zugriff auf die XML-Datei haben, verwenden Sie die Vorlage * identity transform *, um sie zu erhalten. –