XslTransform.Transform生成多个输出文件

时间:2009-07-17 17:23:31

标签: c# .net xslt

我需要从XML数据文件生成多个HTML报告文件,而我正在使用C#(.NET 3.5)。我基本上需要为XML文件中的每个子树提供HTML报告(但它们必须包含一些父信息)。

我决定使用XSLT,因为它似乎是我问题最优雅的解决方案。然后,我可以使用.NET XslTransform.Transform方法创建我的HTML文件......或者我可以吗?

从MSDN上阅读,似乎即使在.NET 3.5中,XslTransform也只支持XSLT 1.0,即使2.0已经存在了一段时间。只能在XSLT 2.0中从单个XSLT文件输出多个文档。

您能解决我的问题是否有解决办法?

3 个答案:

答案 0 :(得分:1)

我建议使用AltovaXML来处理这个问题,也就是说,如果允许你使用外部类库。我个人对此没什么好说的。至于生成多个文档作为输出的代码,您的XSLT文件应如下所示:

<xsl:template match="/">
<xsl:for-each select="Item">        
<xsl:variable name="filename" select="concat($solutionRoot,'\',$v1,'\',$v2,'.html')" />
<xsl:value-of select="$filename"/>
<xsl:result-document href="{$filename}" format="html-format">

   --Place document construction code here--

</xsl:result-document>
</xsl:for-each>
</xsl:template>

基本上将文件名转换为变量,为每个数据部分创建一个新文件名。

答案 1 :(得分:0)

是。让您的XSLT在根目录下生成一个带有“n”元素的文档。让您的代码对这些代码进行后期处理以生成“n”个文档。

答案 2 :(得分:0)

Saxon(.net版本)是XSLT 2实现的黄金标准。它不仅是XSLT 2.0标准的参考实现,而且是高度优化和开源的,作为托管代码运行(通过IKVM库),并支持通常的.net接口。

您可以毫无问题地使用<xsl:result-document>元素。