客户端的第二次xslt转换(xhtml到xsl:fo)

时间:2011-12-21 12:12:39

标签: javascript xhtml xslt xsl-fo

我有一个xml文档,它被转换为xhtml。 现在我需要添加打印按钮,它将使用xsl-fo转换输出(基于天线室xhtml2fo.xsl http://www.antennahouse.com/XSLsample/XSLsample.htm)。

这就是我提出的,但它似乎没有按预期工作

              <script language="JavaScript">
            function convert()
            {
                // Load XSL
                var xsl = new ActiveXObject("Microsoft.XMLDOM")
                xsl.async = false

                xsl.load("xhtml2fo.xsl")

                // Load XML 
                var xml = new ActiveXObject("Microsoft.XMLDOM")
                xml.async = false
                // This won't work
                xml.load(document.getElementsByTagName('html')[0].outerHTML)
                // this prints out html element as expected
                //my_window.document.write(document.getElementsByTagName('html')[0].outerHTML)

                my_window = window.open("", "mywindow1");
                my_window.document.write(xml.transformNode(xsl))
            }
            </script>

如何在客户端进行此操作?我如何能够按需转换工作

1 个答案:

答案 0 :(得分:0)

这里的问题是你需要从浏览器中获取XSL-FO并进入Antenna house XSL-FO处理器可执行文件。这违反了JavaScript安全原则,不能仅使用JavaScript。

您必须使用特定于浏览器的解决方案:可以使用Firefox扩展程序,在IE中使用Active-X或Silverlight插件或使用Chrome Native Client应用程序。

更好的解决方案是在服务器端进行转换,下载转换后的XSL-FO文件并在Antennna House可执行文件中打开它(甚至可以通过将.fo扩展名指定为始终在Antenna中打开来自动执行屋)。