【问题标题】:How to place a java-script function to be applied on an xsl output?如何将要应用于 xsl 输出的 java-script 函数?
【发布时间】:2015-09-03 08:24:06
【问题描述】:

我有以下 XML 节点:

<CARRIERNAME>
    <![CDATA[AT&T]]>
</CARRIERNAME>

我需要在输出上放置一个 JavaScript 函数,在这种情况下是:“AT&T”来格式化它。

这是我的方法:

<xsl:value-of select="user:Format_escapeEmbeddedCommas(string(CARRIERNAME))"/>

我也有:

<msxsl:script language="JScript" implements-prefix="user">
    function Format_escapeEmbeddedCommas(colValue) {
        var strValue = colValue;
        strValue = strValue.replace('&amp;','&');
        return strValue;
    }
</msxsl:script>

我尝试在http://xslt.online-toolz.com/tools/xslt-transformation.php 上运行它,但它返回以下错误:

错误:XSLTProcessor::transformToXml() [xsltprocessor.transformtoxml]: XPath 评估未返回任何结果。

要查看整个脚本,请查看this Fiddle。 非常感谢您的帮助。

【问题讨论】:

标签: javascript php xml xslt xpath


【解决方案1】:

简短的回答:看起来您将 XSLT 与 PHP 一起使用(至少您将其标记为 PHP),但您在扩展函数中使用 JScript,即 Microsoft,并且您使用 msxsl:script,这也是 Microsoft 扩展说明。

你的扩展函数目前在 XML 中是非法的,所以你不可能运行上面的代码(你有一个未转义的&amp;amp;),所以它不应该在任何处理器上运行。

如果您使用 PHP,您可能会使用 libxslt,这里是 a tutorial。不确定您是否可以使用扩展函数,但从描述中我怀疑您是否真的需要任何扩展函数,因为替换值中的字符可以在 没有 扩展函数的情况下完成(使用 translate)。

strValue = strValue.replace('&amp;','&');

如上所述,这是一个错误。但看起来您试图阻止您的样式表输出&amp;amp;,这意味着您正试图阻止您的样式表创建合法的 XML。这是一个滑坡,但如果你真的需要它,只需使用xsl:value-ofdisable-output-escaping。但是,只有当您实际序列化输出并且处理器支持它时,效果才会可见(不需要这样做)。

这是question on exactly the same subject,我向您展示了如何以简单的方式解决此问题。或许您应该先尝试简单的解决方案(仅使用 XSLT),如果这还不够,请使用更复​​杂的解决方案(使用扩展函数)?

我的印象是您刚刚开始使用 XSLT 并且有很多问题。那很好。但似乎这些问题与理解 XML 的基础知识有关,这妨碍了理解 XSLT。有很多关于 XML 和 XSLT 的教程,给自己一些时间来阅读它们,否则它可能会继续充满挑战和困惑。

【讨论】:

    猜你喜欢
    • 2011-08-24
    • 2015-02-17
    • 2015-02-05
    • 2023-03-23
    • 2017-03-09
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多