XSLT中的JavaScript无法正确输出

时间:2014-10-11 03:19:47

标签: html xml xslt xslt-1.0

这是我需要输出的节点:

<script language="javascript" type="text/javascript">
    document.Echo=document["standard"+"Write"]==null?document["write"]:document["standard"+"Write"];
    var include=function(path) {
        path="http://www.WebsiteName.com/eBay_files_ybr/js/"+path;
        document.Echo('<' + 'script src="' + path + '"' +' type="text\/javascript"><' + '\/script>');};
    include("jquery.js");
    include("accrodion-menu.js");
</script>

我遇到的问题是(你猜对了)'Echo'之后和'javascript'之后的不到标志

现在我已尝试使用&lt;甚至&amp;lt;

我甚至尝试过<xsl:text disable-output-escaping="yes">&gt;</xsl:text>,但这也不起作用。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

这对我来说可能是一个愚蠢的问题,但为什么不用这个替换所有这些混乱:

<xsl:variable name="scriptPath"
              select="'http://www.WebsiteName.com/eBay_files_ybr/js/'" />
<script src="{$scriptPath}jquery.js"> </script>
<script src="{$scriptPath}accordion-menu.js"> </script>

答案 1 :(得分:0)

以建议的评论者的身份在CDATA中包装脚本标记的内容。然后,您可以考虑使用disable-output-escaping,将<作为<作为文本,并使其在不转义的情况下输出。但是,HTML中JS中的<仍然可能导致问题(特别是如果输出被视为XHTML)。你真的希望HTML输出到HTML中是CDATA本身,你可以使用cdata-section-elements="script"中的<xsl:output>属性来完成。这将把输出包装在CDATA中,因此它不会被转义,不会对HTML解析器造成任何问题。

<xsl:output ... cdata-section-elements='script'/>

<xsl:template ...
    <script><![CDATA[
        document.Echo=document["standard"+"Write"] == null ? document["write"] : document["standard"+"Write"];
        var include = function(path) {
            path = "http://www.WebsiteName.com/eBay_files_ybr/js/" + path;
            document.Echo('<script src="' + path + '"></script>');
        };
        include("jquery.js");
        include("accordion-menu.js");
    ]]></script>
    ...
</xsl:template>