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文件输出多个文档。
有什么解决方法可以解决我的问题吗?
我会建议使用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>
基本上打开文件的名称到一个变量,创建数据的每个部分新的文件名。
谢谢,我已经看到他们所见即所得风格的XSLT工具也在这里吹捧,我会给他们一个尝试。 – cgyDeveloper 2009-07-20 15:27:26
是的。让你的XSLT在根目录下生成一个带有“n”个元素的文档。让你的代码进行后处理,生成“n”个文档。
Saxon(.net版本)是XSLT 2实现的黄金标准。它不仅是XSLT 2.0标准的参考实现,而且是高度优化的开源代码,作为托管代码(通过IKVM库)运行,并且支持通常的.net接口。
您可以毫无问题地使用<xsl:result-document>
元素。
问题在哪里?我假设.Net会将XML文档解析为DOM表示(这是昂贵的部分)。然后,您只需创建多个XSLT模板并将它们应用于相同的DOM。从可维护性的角度来看,这比将输出文件名存储在XSLT中要好得多。 – kdgregory 2009-07-17 17:57:57