1

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

4

1 回答 1

1

是的,有一个非常简单的方法可以做到这一点。只需使用<xsl:copy-of select="/" />. 例如:

<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 中可能会更好;但你不想这样做,我不确定你的原因是什么。

于 2013-07-03T03:25:18.567 回答