我正在使用.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>
答案 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 && 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 ...