我有一个XML(XHTML)文件,我正在使用XSLT将其转换为另一个XML文件。我能够成功地转换所有内容,但我需要在输出文件中包含一个Javascript,而我无法包含它。有人能告诉我如何使用XSLT在输出文件中包含javascript吗。
我的输入文件:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
</head>
<body>
<div class="TF" id="id8">
<div class="iDev">
<div class="q">
T <input type="radio" name="o0" id="t0" onclick="getFeedback()"/>
</div>
</div>
</div>
</body>
</html>
所需输出
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
</head>
<body>
<div class="QT" id="id10">
<script type="text/javascript">
<!-- //<![CDATA[
var numQuestions = 4;
var rawScore = 0;
var actualScore = 0;
function getAnswer()
{
}
function calulate()
{
}
//]]> -->
</script>
<div class="iDev">
<div class="q">
T <input type="radio" name="o0" id="t0" onclick="getFeedback()"/>
</div>
</div>
</div>
</body>
</html>
XSLT部分:
<xsl:template match="xhtml:div[@id='id8']/@*">
<xsl:attribute name="class">QT</xsl:attribute>
<xsl:attribute name="id">id10</xsl:attribute>
<script type="text/javascript">
<![CDATA[
var numQuestions = 4;
var rawScore = 0;
var actualScore = 0;
function getAnswer()
{
}
function calulate()
{
}
]]>
</script>
</xsl:template>
我已经创建了标识模板,并根据所需的输出更改了所需的属性值,但我仍然不知道如何在<div class="TF" id="id8">
这个标记之后包含javascript。谢谢
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="div[@id='id8']">
<xsl:element name="div">
<xsl:attribute name="class">QT</xsl:attribute>
<xsl:attribute name="id">id10</xsl:attribute>
</xsl:element>
<script type="text/javascript">
<![CDATA[
var numQuestions = 4;
var rawScore = 0;
var actualScore = 0;
function getAnswer()
{
}
function calulate()
{
}
]]>
</script>
</xsl:template>
</xsl:stylesheet>
已编辑
输入xml文件如下:
<?xml version="1.0" encoding="utf-8"?>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
</head>
<body>
<div id="id8">
</div>
<div class="iDev">
<div class="q">
T <input type="radio" name="o0" id="t0" onclick="getFeedback()"/>
</div>
</div>
</body>
</html>
输出xml如下:
<?xml version="1.0" encoding="utf-8"?>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
</head>
<body>
<div class="QT" id="id10" /><script type="text/javascript">
var numQuestions = 4;
var rawScore = 0;
var actualScore = 0;
function getAnswer()
{
}
function calulate()
{
}
</script>
<div class="iDev">
<div class="q">
T <input type="radio" name="o0" id="t0" onclick="getFeedback()" />
</div>
</div>
</body>
</html>
我希望这将帮助你。。。
忘记注释,只需将JavaScript代码放在CDATA部分中即可。现在很少有浏览器在<script>
节点中出现裸脚本问题。
根据这里给出的建议,我尝试了以下方法,效果非常好。如果其他人也面临同样的问题,那么试试这个-
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns="http://www.w3.org/1999/xhtml"
exclude-result-prefixes="xhtml">
<xsl:output method="html" indent="yes" encoding="UTF-8"/>
<xsl:strip-space elements="*" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="xhtml:div[@id='id8']" xmlns="http://www.w3.org/1999/xhtml">
<div id="id10" class="QT">
<xsl:apply-templates select="
(@*[local-name()!='id']
[local-name()!='class'])
| node()"/>
</div>
<script type="text/javascript">
<![CDATA[
var numQuestions = 4;
var rawScore = 0;
var actualScore = 0;
function getAnswer()
{
}
function calulate()
{
}
]]>
</script>
</xsl:template>
<xsl:stylesheet>