2009-07-17 131 views
0

我需要從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

回答

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> 

基本上打開文件的名稱到一個變量,創建數據的每個部分新的文件名。

+0

謝謝,我已經看到他們所見即所得風格的XSLT工具也在這裏吹捧,我會給他們一個嘗試。 – cgyDeveloper 2009-07-20 15:27:26

0

是的。讓你的XSLT在根目錄下生成一個帶有「n」個元素的文檔。讓你的代碼進行後處理,生成「n」個文檔。

0

Saxon(.net版本)是XSLT 2實現的黃金標準。它不僅是XSLT 2.0標準的參考實現,而且是高度優化的開源代碼,作爲託管代碼(通過IKVM庫)運行,並且支持通常的.net接口。

您可以毫無問題地使用<xsl:result-document>元素。

相關問題