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