如何使用xml属性作为对象名称反序列化f#中的xml?

时间:2013-09-14 21:43:03

标签: xml f# deserialization

我正在制作一个解决方案,它使用了大量需要在项目之间共享的字符串。因此,为了避免打字错误,我正在制作一个XML文件,其中包含所有这些字符串,供其他项目访问...

为了实现这一点,我当然需要一个XML Deserializer来将我的xml数据转换为对象......

我的XML文件看起来像这样:

<?xml version="1.0" encoding="utf-8" ?>
<Strings>
    <String Name="string1">foo</String>
    <String Name="string2">bar</String>
    <String Name="string3">baz</String>
</Strings>

我需要能够像这样访问我的数据:string1.Value。也就是说,使用属性作为对象名称,将数据作为数据...

我如何在F#中执行此操作?为此最好使用XDocument或XmlSerializer吗?

1 个答案:

答案 0 :(得分:0)

有一个可能有用的F#XML类型提供程序:

http://fsharp.github.io/FSharp.Data/library/XmlProvider.html

在编译时给定XML文件,它将生成以静态类型方式访问文档所需的类型。

type Author = XmlProvider<"""<author name="Paul Feyerabend" born="1924" />""">
let sample = Author.Parse("""<author name="Karl Popper" born="1902" />""")

printfn "%s (%d)" sample.Name sample.Born