使用Liquid Data Mapper从XML到CSV的数据头

时间:2019-01-03 14:04:42

标签: liquid-xml

我有一个描述标题和列表的XML文件。我需要生成一个CSV文件,其中文件的第一行是根据标题信息构建的,文件的后续各行是从列表构建的。标题与列表项的列数不同。

使用xsl很容易做到。如何使用.NET映射引擎使用数据映射器完成此操作?

一个简单的例子来解释。输入xml的XSD

<xs:element name="Root">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="A" />
            <xs:element name="B" />
            <xs:element name="Line" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="C" />
                        <xs:element name="D" />
                        <xs:element name="E" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>

输入XML示例

 <Root>
     <A>Header Value</A>
     <B>112233</B>
     <Line>
         <C>22</C>
         <D>Fred</D>
         <E>1</E>
     </Line>
     <Line>
         <C>34</C>
         <D>Jim</D>
         <E>2</E>
     </Line>
     <Line>
         <C>42</C>
         <D>Amanda</D>
         <E>1</E>
     </Line>
     <Line>
         <C>1267</C>
         <D>Vickie</D>
         <E>2</E>
     </Line>
 </Root>

必填文本输出:

 Header Value|112233
 22|Fred|1
 34|Jim|2
 42|Amanda|1
 1267|Vickie|2

生成任一

 Header Value|112233

 22|Fred|1
 34|Jim|2
 42|Amanda|1
 1267|Vickie|2

作为单个csv文件很容易(应该如此),但是除了求助于xslt之外,我看不到如何生成所需文件。

1 个答案:

答案 0 :(得分:0)

如果您希望能够动态设置标题,则可以设置一个看起来像这样的转换。

enter image description here

使用“复制”选项将“行”输入加倍

enter image description here

在执行此操作之前,您需要调整架构。输入值A-E需要输入(请注意type="xs:string")。

<?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid Studio 2019 (https://www.liquid-technologies.com)-->
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="Root">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="A" type="xs:string" />
                <xs:element name="B" type="xs:string" />
                <xs:element name="Line" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="C" type="xs:string" />
                            <xs:element name="D" type="xs:string" />
                            <xs:element name="E" type="xs:string" />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

这将为您提供如下所示的输出数据(请注意,它始终输出3列,因此会出现尾随的'|')。

Header Value|112233|
22|Fred|1
34|Jim|2
42|Amanda|1
1267|Vickie|2

如果只需要数据而没有标题,则可以像这样将其连接

enter image description here