由于...有趣......遗留系统的实现方式,XSLT用于从输入XML文档生成HTML。当页面POST返回服务器时所需的部分输出是原始XML文档。例如如果这是来源:
<page>
<head>Hello</head>
</page>
输出可能如下所示:
<html>
<head></head>
<body>
<script type='text/javascript'>
document.sourceXml = '<page><head>Hello</head></page>';
</script>
</body>
</html>
(直到最近才将XML发布到HTML中,这是我可以提出的最好的工作,而不会过多地修改遗留系统。)
这让我想到了实际问题:现有的XSLT使用专有的<msxml:script>
标记将源XML输出到输出中:
<msxsl:script language="JScript" implements-prefix="user">
<![CDATA[
function fnGetXML(oRootList)
{
var sXML=oRootList.item(0).documentElement.xml
return sXML;
}
]]>
</msxsl:script>
<script type="text/javascript">
document.pageXml = '<xsl:value-of disable-output-escaping="yes" select="user:fnGetXML(.)" />';
</script>
在每个其他XSLT引擎中都会出现这种情况,以及更新版本的MSXML(没有打开特殊标志以允许运行脚本)。有没有办法用直接XSLT完成同样的任务?
答案 0 :(得分:1)
是的,有一种非常简单的方法可以做到这一点。只需使用<xsl:copy-of select="/" />
即可。 E.g:
<xsl:template match="/">
<html>
<head></head>
<body>
<script type='text/javascript'>
document.sourceXml = '<xsl:copy-of select="/" />';
</script>
</body>
</html>
</xsl:template>
现在,如果您的源XML中可以包含单引号,那么您的javascript就不会满意了。我不确定我是否理解你的目的,知道这对你来说是否重要。在这种情况下,您可以更好地将XML发布到HTML中;但你不想这样做,我不确定你的理由是什么。