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