如何将Ocaml数据类型转换为xml,反之亦然?

时间:2011-03-16 15:44:31

标签: xml ocaml

是否有一种简单的方法可以从Ocaml数据类型转换为相应的xml表示形式?

假设我有以下类型:

type A =
  | FirstA of B list
  | SecondA of C * string

type B = B1 | B2

type C = {
  my_field: int;
}

对于值SecondA (C {my_field=10}, "just a value"),我希望得到类似这样的内容:

<A constructor="FirstA">
   <C><my_field>10</my_field></C>
   <string>just a value</string>
</A>

有没有可以做这样的事情的图书馆?或者,如果我必须自己做,最好的方法是什么?请注意,我想将其应用于多种不同的数据类型。

我知道数据类型的通用编程技术,但在我的情况下它们太“重”了。

2 个答案:

答案 0 :(得分:6)

如果我理解你的问题,可以IoXML执行此操作:

  

IoXML是一个Camlp5语法扩展   OCaml mli和ml文件生成   适用于所有类型的XML解析器和打印机   你定义。

JSON有类似的内容:https://github.com/mirage/shelf

如果您使用JSON没问题,我建议您也查看ATD/yojson。该系统依赖于外部数据定义语言,但它仍然产生惯用的OCaml类型定义。

更新(08/15/2011):现在我自己的Piqi project也可以这样做。它可以使用4种不同的格式序列化OCaml数据:Google Protocol Buffers,JSON,XML和Piq。

答案 1 :(得分:5)

我不确定“数据类通用编程技术”是什么意思。有多个库使用camlp4预处理器从类型声明中自动派生序列化器:

虽然这些都不会产生XML,但它们可能会有所帮助。特别是sexplib生成的s表达式与XML并不太相似。