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

Cal*_*lin 5 xml ocaml

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

假设我有以下类型:

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

type B = B1 | B2

type C = {
  my_field: int;
}
Run Code Online (Sandbox Code Playgroud)

对于SecondA (C {my_field=10}, "just a value")我想得到的价值可能是这样的:

<A constructor="FirstA">
   <C><my_field>10</my_field></C>
   <string>just a value</string>
</A>
Run Code Online (Sandbox Code Playgroud)

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

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

ala*_*rik 6

如果我正确理解你的问题,可以使用IoXML:

IoXML是OCaml mli和ml文件的Camlp5语法扩展,可为您定义的所有类型生成XML解析器和打印机.

JSON有一个类似的:https://github.com/mirage/shelf

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

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


小智 5

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

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