在XSLT转换期间,如何以及在何处输出日志消息以用于调试和性能目的?
我想最简单的方法是使用这样的表达式:
<xsl:text>message text</xsl:text>
Run Code Online (Sandbox Code Playgroud)
这里和那里的代码,xsl:value-of如果需要使用.
但是这个方法在输出文件(我的情况下是HTML页面)中的很多地方打印消息,这是它被调用的地方,而不是总是在同一个地方(比如日志文件).
这是唯一的方法还是有更好的解决方案?谢谢!
Nic*_*son 10
这正是<xsl:message>为此而设计的.但是,输出位置完全取决于处理器.我只有Mac便携,但遗憾的是,Firefox和Safari都抑制了<xsl:message>输出.我希望MSIE能做同样的事情.
鉴于此,我认为您最好的选择是使用<xsl:comment>生成日志.像下面这样的东西应该做的伎俩:
<xsl:template match='my-element'>
<xsl:comment>Entering my-element template</xsl:comment>
<p class='my-element'><xsl:apply-templates/></p>
<xsl:comment>Leaving my-element template</xsl:comment>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
这会在输出中给你这样的东西:
<!-- Entering my-element template -->
<p class='my-element'>...</p>
<!-- Leaving my-element template -->
Run Code Online (Sandbox Code Playgroud)
显然,您可以将所需的任何日志记录放入该输出中.我会考虑创建类似下面的内容并使用它来运行您的日志记录.这引用了一个名为"enable-logging"的全局参数来确定是否应该进行日志记录.
<xsl:template name='create-log'>
<xsl:param name='message'/>
<xsl:if test="$enable-logging = 'yes'">
<xsl:comment><xsl:value-of select='$message'/></xsl:comment/>
</xsl:if>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
在样式表中使用此作为:
<xsl:template match='my-element'>
<xsl:call-template name='create-log'>
<xsl:with-param name='message'/>Entering my-element template</xsl:with-param>
</xsl:call-template>
<p class='my-element'><xsl:apply-templates/></p>
<xsl:call-template name='create-log'>
<xsl:with-param name='message'/>Leaving my-element template</xsl:with-param>
</xsl:call-template>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
这样做的一个好处是,您可以将其更改<xsl:comment>为<xsl:message>在更完整的环境中.它更冗长但更通用.