【问题标题】:Getting the xslt "stack"获取 xslt“堆栈”
【发布时间】:2014-07-07 20:22:35
【问题描述】:

我有一个 xsl 模板:

<xsl:template name="xsl-error-message">
    <xsl:element name="script">
        <xsl:text>console.error(&quot;There is an error.&quot;);</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>

我希望&lt;script&gt; 标记内部包含以下 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


【解决方案1】:

值得一提的是,Saxon 有一个扩展函数来输出堆栈跟踪:

http://www.saxonica.com/documentation/#!functions/saxon/print-stack

但是,与所有 Saxon 扩展一样,这需要 Saxon-PE 或更高版本,这意味着您将不得不花一些钱。

【讨论】:

    猜你喜欢
    • 2010-10-11
    • 2012-12-19
    • 1970-01-01
    • 2018-01-26
    • 1970-01-01
    • 2010-10-19
    • 2013-12-22
    • 2014-04-26
    • 2011-11-21
    相关资源
    最近更新 更多