XslTransform.Transform生成多个输出文件

XslTransform.Transform生成多个输出文件

问题描述:

我需要从XML数据文件生成多个HTML报告文件,并使用C#(.NET 3.5)。我基本上需要HTML文件中的每个特定子树的HTML报告(但他们必须包含一些父级信息)。XslTransform.Transform生成多个输出文件

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

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

有什么解决方法可以解决我的问题吗?

+0

问题在哪里?我假设.Net会将XML文档解析为DOM表示(这是昂贵的部分)。然后,您只需创建多个XSLT模板并将它们应用于相同的DOM。从可维护性的角度来看,这比将输出文件名存储在XSLT中要好得多。 – kdgregory 2009-07-17 17:57:57

我会建议使用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> 

基本上打开文件的名称到一个变量,创建数据的每个部分新的文件名。

+0

谢谢,我已经看到他们所见即所得风格的XSLT工具也在这里吹捧,我会给他们一个尝试。 – cgyDeveloper 2009-07-20 15:27:26

是的。让你的XSLT在根目录下生成一个带有“n”个元素的文档。让你的代码进行后处理,生成“n”个文档。

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

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