.Net 1.1中的XSL到HTML:如何包含具有'&&'的javascript没有错误?

时间:2009-11-24 07:30:40

标签: .net xslt escaping

我正在使用.Net 1.1中的xslt将xml转换为html。一部分包含一个javascript部分,其中2个变量是ANDed(&&)。转换会抛出一个未知的实体错误。我能做什么?我试过'CDATA'和'禁用 - 输出 - 逃避',但没有成功。如果我写&&那么输出也是'&&'。

这是我的代码。 (为了清晰起见,修剪)

<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" standalone="yes" indent="yes" cdata-section-elements="script style"/>

    <xsl:template match="/menus">
<html>
<xsl:text disable-output-escaping="yes">
    <head>
        <title>Portal</title>
        <script type="text/javascript">
//
// Show hide language block
//
function lang(s) {
    var elD = document.getElementById('german');
    var elE = document.getElementById('english');
    if(elD && elE) {    /// <<---- error occurs here
        elD.style.display = s == 'german' ? 'block': 'none';
        elE.style.display = s == 'german' ? 'none': 'block';
    }
}
        </script>
</head>
</xsl:text> 
<body>
    <h2>Das Portal ist vorübergehend unerreichbar / The Portal is temporarily unavailable</h2>

    <div><a href="#" onclick="lang('german')">deutsch</a> | <a href="#"  onclick="lang('english')">English</a>
    </div>

    <div id="german">
        <xsl:apply-templates select="//menu[@lang='de']"/>
    </div>

    <div id="english">
        <xsl:apply-templates select="//menu[@lang='en']"/>
    </div>
</body>
</html> 
</xsl:template>

3 个答案:

答案 0 :(得分:2)

您可以尝试将脚本放在CDATA部分。 XSLT文件中的AFAIK CDATA部分不会转换为输出文件中的CDATA部分。

<script language="JavaScript">
  <![CDATA[
// 
// Show hide language block 
// 
function lang(s) { 
    var elD = document.getElementById('german'); 
    var elE = document.getElementById('english'); 
    if(elD && elE) {    /// <<---- error occurs here 
        elD.style.display = s == 'german' ? 'block': 'none'; 
        elE.style.display = s == 'german' ? 'none': 'block'; 
    } 
} 
  ]]>
</script>

答案 1 :(得分:1)

尝试将其作为字符实体:if(elD &amp;&amp; elE)并移动<xsl:text>内的<script>标记。

答案 2 :(得分:0)

对于信息我成功:   - 在HEAD部分导入外部JavaScript   - 在正文中定义我自己的javascript

由于我仍然忽略的原因,需要xsl:text,否则无法导入外部javascript。

        <html>
        <xsl:text  disable-output-escaping="yes">
        <![CDATA[
        <head>
            <title>Products - Eshop</title>
            <link rel="stylesheet" type="text/css" href="./catalog.css"/>
            <script language="javascript" type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
            <script language="javascript" type="text/javascript" src="./jquery.condense.js"></script>
        </head>
        ]]>
        </xsl:text>   
        <body>
            <script type="text/javascript"  language="javascript">  
                <![CDATA[
                $(document).ready(function(){

                     $('.condensed').condense({    
                        moreSpeed: 'fast',
                        lessSpeed: 'slow',
                        moreText: 'show more',
                        lessText: 'show less',
                        ellipsis: " [more...]",
                        condensedLength: 40
                });                                     
                });
                ]]>
            </script>

            <h3>List of Accessories</h3>

                            ... AND SO ON ...