使用XSLT将XML转换为多个CSV

时间:2017-09-29 10:47:12

标签: c# .net xml csv xslt

例如,我的XML文件具有以下结构:

<?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>

我确信XML文件中始终只有一个MainItem。同时,一个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>&#10;</xsl:text>  
<xsl:for-each select="MainItem">
    <xsl:value-of select="Field1"/>
    <xsl:text>,</xsl:text>
    <xsl:value-of select="Field2"/>     
    <xsl:text>&#10;</xsl:text> 
</xsl:for-each>

此XSLT将XML转换为以下CSV:

Field1,Field2
1,2

问题是如何使用XSLT将上述XML转换为2个CSV文件 - 第一个用于MainItem元素,第二个用于SubItem

我正在使用.NET XslCompiledTransform类来执行转换。

1 个答案:

答案 0 :(得分:1)

使用Cinchoo ETL库(开源ETL框架)

可以做到这一点
using (var reader = new ChoXmlReader("test.xml").WithXPath("MainItem")
    .WithField('Field1')
    .WithField('Field2')
)
{
    using (var writer = new ChoCSVWriter("test.csv"))
        writer.Write(reader);
}

免责声明:我是这个图书馆的作者。