我正在玩Fsharp脚本并试图找到一种方法将数据从XML文件转换为CSV文件。
我从使用typeprovider读取XML文件开始,之后我想要的是使用ServiceStack.Text序列化程序,但当然数据还没有准备好,因为我还有一个XmlProvider。
我可能从错误的方面来解决问题。有什么见解吗?
答案 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()