首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有OCaml ppx_xml_conv模块的使用示例?

是否有OCaml ppx_xml_conv模块的使用示例?
EN

Stack Overflow用户
提问于 2015-11-06 17:46:39
回答 2查看 917关注 0票数 2

我正在为janestreet的ppx_xml_conv模块寻找一个简单的例子。我对(相对的)新的ppx不太熟悉,也无法从源代码中找到答案。最后,我试图为旧SOAP服务编写一个客户机,并希望将xsd (从wsdl)转换为类型和序列化程序/反序列化程序。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-17 16:21:39

由于有一个康夫,我将给出一个ppx_sexp_conv的例子,它的工作原理是相同的。

代码语言:javascript
复制
$ cat a.ml
open Sexplib.Std

type attr = {
  attr_id : string;
  attr_path : string;
  attr_value : string;
} [@@deriving sexp]

$ cat a.mli
type attr = {
  attr_id : string;
  attr_path : string;
  attr_value : string;
} [@@deriving sexp]

$ ocamlfind ocamlc -package sexplib,ppx_sexp_conv -dsource -c a.mli
type attr = {
  attr_id: string;
  attr_path: string;
  attr_value: string;}[@@deriving sexp]
val attr_of_sexp : Sexplib.Sexp.t -> attr
val sexp_of_attr : attr -> Sexplib.Sexp.t

$ ocamlfind ocamlc -package sexplib,ppx_sexp_conv -dsource -c a.ml
(* ... long output ... *)

我使用了-dsource标志,这样您就可以看到生成的输出。请注意,不需要创建ppx可执行文件并单独调用它。使用ppx_sexp_conv包编译将使该包的ppx扩展自动得到应用。

作为另一个例子,这里有一个可执行文件:

代码语言:javascript
复制
$ cat b.ml
open Sexplib.Std

type attr = {
  attr_id : string;
  attr_path : string;
  attr_value : string;
} [@@deriving sexp]

let x = {attr_id="abc"; attr_path="foo/bar"; attr_value="something"}

let () = Printf.printf "sexp: %s\n" (Sexplib.Sexp.to_string (sexp_of_attr x))

$ ocamlfind ocamlc -package sexplib,ppx_sexp_conv -linkpkg b.ml

$ ./a.out 
sexp: ((attr_id abc)(attr_path foo/bar)(attr_value something))
票数 3
EN

Stack Overflow用户

发布于 2015-11-09 19:14:11

对于那些像我一样倾向于陷入无知之中的人,我建议大家看看司机的自述。

总之,基本过程是,首先构建一个驱动程序(用正在使用的转换模块替换-package ppx_sexp_conv -package ppx_bin_prot ):

代码语言:javascript
复制
$ ocamlfind ocamlopt -predicates ppx_driver -o ppx -linkpkg \
  -package ppx_sexp_conv -package ppx_bin_prot \
  ppx_driver_runner.cmxa

这将为您提供一个ppx可执行文件。对源文件运行此操作将转储源代码的扩展版本。

代码语言:javascript
复制
$ ./ppx -help
ppx [extra_args] [files] ...
$ ./ppx src/myFile.ml

然后,该可执行文件可以用作构建时的预处理程序。

代码语言:javascript
复制
$ ocamlc -c -pp ./ppx src/myFile.ml

我的线人

代码语言:javascript
复制
type attr = {
  attr_id : string;
  attr_path : string;
  attr_value : string;
} [@@deriving xml]

预处理器增加了to_xml tfrom_xml xml函数。

不过,如上所述,这是您所能得到的,因为ppx_driver框架仍然存在一些悬而未决的问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33572647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档