【问题标题】:XslTransform.Transform to produce multiple output filesXslTransform.Transform 生成多个输出文件
【发布时间】:2009-07-17 17:23:31
【问题描述】:

我需要从一个 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 文件输出多个文档。

对于我的问题,您能想到什么解决方法吗?

【问题讨论】:

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

标签: c# .net xslt


【解决方案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>

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

【讨论】:

  • 谢谢,我看到他们的 WYSIWYG 风格的 XSLT 工具也在此处被吹捧,我会试试看。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    您可以在那里毫无问题地使用&lt;xsl:result-document&gt; 元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-12
      • 2019-04-09
      • 1970-01-01
      • 2021-08-27
      • 2022-01-16
      • 1970-01-01
      • 2013-06-22
      • 1970-01-01
      相关资源
      最近更新 更多