我有一个描述标题和列表的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之外,我看不到如何生成所需文件。
答案 0 :(得分:0)
如果您希望能够动态设置标题,则可以设置一个看起来像这样的转换。
使用“复制”选项将“行”输入加倍
在执行此操作之前,您需要调整架构。输入值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
如果只需要数据而没有标题,则可以像这样将其连接