在源文档中嵌入源文档

时间:2013-07-02 20:08:39

标签: xml xslt

由于...有趣......遗留系统的实现方式,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完成同样的任务?

1 个答案:

答案 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中;但你不想这样做,我不确定你的理由是什么。