0
例如,我有一個以下結構的XML文件:XML轉換多個CSV使用XSLT
<?xml version="1.0" encoding="utf-8"?>
<MainItem>
<Field1>1</Field1>
<Field2>2</Field2>
<SubItem>
<SubField1>1</SubField1>
<SubField2>2</SubField2>
</SubItem>
<SubItem>
<SubField1>3</SubField1>
<SubField2>4</SubField2>
</SubItem>
</MainItem>
我知道肯定有永遠只有一個MainItem
在XML文件中。同時,一個MainItem
可能有多個SubItem
元素。 我希望能夠使用XSLT將此XML轉換爲CSV。下面是我目前的XSLT腳本:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:text>Field1,Field2</xsl:text>
<xsl:text> </xsl:text>
<xsl:for-each select="MainItem">
<xsl:value-of select="Field1"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="Field2"/>
<xsl:text> </xsl:text>
</xsl:for-each>
這XSLT轉換XML爲以下CSV:
Field1,Field2
1,2
的問題是,我該如何使用XSLT把上面提到的XML轉換2個CSV文件 - 第一個爲MainItem
元素,第二個爲SubItem
?
我正在使用.NET XslCompiledTransform
類來執行轉換。
如果您使用Saxon 9或XmlPrime或Altova等XSLT 2.0處理器,則可以使用'xsl:result-document'通過一次轉換創建多個結果文檔。如果您使用XSLT 1.0處理器,則需要檢查它是否支持擴展元素以創建多個結果文檔。 –
我不知道支持XslCompiledTransform來創建幾個帶有一個轉換的結果文檔,只是嘗試使用擴展對象或腳本將創建委託給.NET代碼。在這種情況下,編寫兩個單獨的XSLT樣式表然後使用XSLT之外的.NET代碼分別運行兩個樣式表來創建兩個CSV文件可能會更容易。但使用.NET,您可以選擇切換到Saxon 9(HE版本是開源的,可在NuGet上使用)或XmlPrime或Altova,以切換到XSLT 2.0或3.0。 –
感謝您的評論,我將使用XSLT 2.0和Saxon HE。 – floyd