【发布时间】:2014-07-07 20:22:35
【问题描述】:
我有一个 xsl 模板:
<xsl:template name="xsl-error-message">
<xsl:element name="script">
<xsl:text>console.error("There is an error.");</xsl:text>
</xsl:element>
</xsl:template>
它可以从转换中的其他任何地方调用,以“抛出”错误消息。错误消息采用脚本 (javascript) 标记的形式,使用 console.error() javascript 函数。
现在,我还想显示指向此模板的“堆栈跟踪”。假设这是调用模板:
<xsl:template match="/">
<xsl:call-template name="foo"/>
</xsl:template>
<xsl:template name="foo">
<xsl:call-template name="xsl-error-message"/>
</xsl:template>
我希望<script> 标记内部包含以下 javascript 代码:
console.log('There is an error. Callers: <xsl:template match="/"> --> <xsl:template name="foo"> --> <xsl:template name="xsl-error-message">');
所以我想检索哪些模板称为xsl-error-message 模板,并将这个“跟踪”放在javascript 代码中。
如果我不能这样做,有没有办法让调试 XSLT 变得更容易,并提示哪个模板称为 xsl-error-message 模板?
或者有什么方法可以使用 PHP XsltProcessor(或任何其他 PHP5+ 内置 xsl 处理器)来帮助调试并找到哪个模板调用了另一个模板?我看到了setProfiling() 方法,但我没有找到获取某种堆栈的方法(我可以在分析日志文件中看到xsl-error-message 已被调用,但我不知道是哪个模板调用了它)。
【问题讨论】:
-
在浏览器中调试客户端 XSLT 很困难,但有一些 XML 或 XSLT IDE,例如 Stylus Studio 或 Oxygen,它们具有调试器。
-
我不知道这是什么意思,但你总是可以调用带有参数的模板。
-
当然,请使用真正的 XSLT 调试器,您可以在其中单步执行、设置断点、查看调用堆栈、评估变量和动态调试...oXygen、Stylus、Altova。
-
@MartinHonnen 哦,天哪……嗯……好吧,很有趣,但完全超出了我的预算!实际上,我也“接受”使用 PHP 的 XsltProcessor 的方式,因为我可以在服务器端应用 xslt。有什么想法吗?
-
恕我直言,即使尝试做 350 美元能买到的东西,您也会花费数不清的时间和精力。所以,对不起,你没有任何想法,除了谷歌“免费 XSLT 调试器”,看看会导致什么。从来没有使用过任何一个。
标签: javascript php xml templates xslt