Protokollierung mit XSLT
Wie und wo könnte ich Ausgabe von log-Meldungen für debugging-und performance-Zwecken während Sie eine XSLT-transformation?
Ich denke die einfachste Methode ist die Verwendung von Ausdrücken, wie diesen:
<xsl:text>message text</xsl:text>
hier und dort in den code, mit xsl:value-of
wenn nötig.
Aber diese Methode druckt die Nachrichten in eine Menge von Orten in der Ausgabe-Datei (HTML-Seite, in meinem Fall), das ist, wo es genannt wird, und nicht immer an der gleichen Stelle (wie ein Logfile).
Ist dies der einzige Weg oder gibt es eine bessere Lösung? Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist genau das, was
<xsl:message>
ausgelegt ist. Jedoch, die Ausgabe, die Lage ist völlig abhängig von dem Prozessor. Ich habe nur einen Mac praktisch, aber, leider, Firefox und Safari unterdrücken die<xsl:message>
Ausgabe. Ich erwarte MSIE wird das gleiche tun.Gegeben, dass, ich denke, Ihre beste Wette ist zu verwenden
<xsl:comment>
für die Erstellung Ihrer Protokolle. So etwas wie das unten sollte den trick tun:Dass würde Ihnen so etwas wie dies in der Ausgabe:
Klar, Sie können setzen, was die Protokollierung Sie möchten, dass in diese Ausgabe. Ich würde erwägen, so etwas wie die folgenden zu erhalten, führen Sie Ihre Anmeldung. Dies verweist auf eine Globale param namens "enable logging", um festzustellen, ob die Protokollierung erfolgen sollte oder nicht.
Verwenden Sie diese in Ihrem stylesheet als:
Ein Vorteil dieser Methode ist, Sie können ändern, die
<xsl:comment>
zu<xsl:message>
wenn Sie in eine umfassendere Umgebung. Es ist Ausführlicher, aber mehr allgemein.Ich würde vorschlagen, mit
xsl:message
wenn Sie in einer Entwicklungsumgebung wie Sauerstoff oder Stylus Studio, und mitxsl:comment
wenn Sie im browser ausgeführt werden. Sie sollten nicht wirklich Debuggen von XSLT-code in der browser - der Browser, die ich kennen, sind mieser als XSLT-debugging-tools.Durch die Suche nach einer Lösung für dieses problem, ich landete die Implementierung eines logging-Mechanismus in XSLT in ähnlicher Weise wie log4j, die vor allem mit xsl:message und Reine XSLT-2.x. Ich habe einige der Antworten auf dieser Seite wie die Eingänge. Die library ist hier erhältlich: https://github.com/ukuko/log4xslt
Ändern der XSLT-selbst für die Zwecke der Protokollierung wird unweigerlich Auswirkungen auf die Leistung haben, sind Sie wahrscheinlich besser dran mit einem externen tool. Es gibt ein paar zur Verfügung, je nachdem, was mit dem Sie arbeiten:
Sollten Sie in der Lage sein zu verwenden <xsl:message> ich denke,, obwohl, wo das logging geht, ist von der Implementierung abhängig.
Einem einfachen hack wäre, um eine variable zu erstellen mit
xsl:variable
und entweder nurconcat()
neue Werte oder einexsl:template
die nicht die gleiche Sache. Dann brauchen Sie nur auf die Ausgabe dieser variable am Ende der Ausführung und können Sie explizit wählen, wo das Protokoll zeigen.