是否有一种简单的方法可以从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>
有没有可以做这样的事情的图书馆?或者,如果我必须自己做,最好的方法是什么?请注意,我想将其应用于多种不同的数据类型。
我知道数据类型的通用编程技术,但在我的情况下它们太“重”了。
答案 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并不太相似。