XSLT 2多文件输出

时间:2014-06-10 08:18:04

标签: c# xml xslt xslt-2.0 saxon

我正在使用saxon for xml to html transform with xslt我需要有两个输出文件,一个是基本的html,一个是javascript文件,如果不支持js,它可以是文本文件。 这是我的转换的c#代码和xsl文档的一部分。我需要输出一个来自转换后的xml的html文件和一个带有一些脚本的javascript文件

   public void ConvertXMLtoHTMLXSLT2Saxon()
    {
        System.IO.DirectoryInfo myDirectory = new DirectoryInfo(Environment.CurrentDirectory);
        string parentDirectory = myDirectory.Parent.Parent.FullName;
        string xsltFile = Path.Combine(parentDirectory, "test.xslt");
        string xmlFile = Path.Combine(myDirectory.FullName, "test.xml");

        // Create a Processor instance.
        Processor processor = new Processor();

        // Load the source document.
        XdmNode input = processor.NewDocumentBuilder().Build(new Uri(xmlFile));

        // Create a transformer for the stylesheet.
        XsltTransformer transformer = processor.NewXsltCompiler().Compile(new Uri(xsltFile)).Load();

        // Set the root node of the source document to be the initial context node.
        transformer.InitialContextNode = input;

        // BaseOutputUri is only necessary for xsl:result-document.
        transformer.BaseOutputUri = new Uri(xsltFile);

        // Create a serializer.
        Serializer serializer = new Serializer();

        serializer.SetOutputFile("test.html");

        // Transform the source XML to System.out.
        transformer.Run(serializer);
    }

这里是xsl文档的一部分

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html"/>
 <xsl:template match="/">
 <xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE html></xsl:text>
<HTML>
<HEAD>
<TITLE></TITLE>
<script src="Scripts/test.js"></script>
</HEAD>
<BODY>
<xsl:apply-templates/>
</BODY>
</HTML>
 </xsl:template>
<xsl:template match="Page"> 
     <xsl:apply-templates/>
<xsl:result-document href="{@Name}.js">
$(document).ready(function (){
--some javascript code--
})
  </xsl:result-document>
</xsl:template>
</xsl:stylesheet>

1 个答案:

答案 0 :(得分:0)

如果您希望辅助输出文档是纯文本文件,请使用例如

<xsl:result-document href="{@Name}.js" method="text">
$(document).ready(function (){
--some javascript code--
})
  </xsl:result-document>

XSLT没有针对Javascript文件的特殊序列化,因此method="text"是适当的方法。