在Fsharp中将XML文件转换为CSV文件

时间:2016-02-18 20:47:15

标签: .net xml csv f# type-providers

我正在玩Fsharp脚本并试图找到一种方法将数据从XML文件转换为CSV文件。

我从使用typeprovider读取XML文件开始,之后我想要的是使用ServiceStack.Text序列化程序,但当然数据还没有准备好,因为我还有一个XmlProvider。

我可能从错误的方面来解决问题。有什么见解吗?

1 个答案:

答案 0 :(得分:4)

如果您想使用XML和CSV类型提供程序,您可以定义两种类型 - 一种基于样本表示输入,另一种基于显式模式表示输出。

假设test.xml看起来像这样:

<data>
  <item foo="1" bar="2" />
  <item foo="1" bar="3" />
</data>

然后,您可以按如下方式定义类型。对于Output类型,我们说的是输出CSV的列名称及其类型:

open FSharp.Data

type Input = XmlProvider<"c:/temp/test.xml">
type Output = CsvProvider<"foo (int), bar (int)">

现在,您可以将输入数据转换为输出行,将其添加到新的空CSV文件中,并使用SaveToString将其保存为字符串,或仅使用Save将其保存到文件中:

let newRows =
  [ for r in Input.GetSample().Items ->
      Output.Row(r.Foo, r.Bar) ]

Output.GetSample().Append(newRows).SaveToString()