ocaml - OCaml ppx_xml_conv 模块是否有任何使用示例

标签 ocaml ppx

我正在寻找来自 janestreet 的 ppx_xml_conv 模块的简单示例。我不太熟悉(相对)新的 ppx 东西,也无法从源代码中真正弄清楚。 最终,我正在尝试为旧的 SOAP 服务编写客户端,并希望将 xsd(来自 wsdl)转换为类型和序列化器/反序列化器。

最佳答案

因为有一个 bug in ppx_xml_conv ,我将给出一个 ppx_sexp_conv 的示例,它的工作原理相同。

$ 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 扩展名。

另一个例子是一个可执行文件:

$ 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))

关于ocaml - OCaml ppx_xml_conv 模块是否有任何使用示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33572647/

相关文章:

ocaml - OCaml 4.02.0 的 mark_tag_used 警告

hashtable - Stackoverflow 与专门的 Hashtbl(通过 Hashtbl.make)

type-conversion - OCaml 中的类型化整型常量

ocaml - 使用ppx和扩展点在OCaml中为DSL编写解析器

通过我的 PPX 语法扩展转换的 OCaml 代码找不到其他包

ocaml - 使用 ppx_driver (register_transformation_using_ocaml_current_ast) 进行 AST 转换的任何良好用法示例?

OCaml 属性

debugging - 在OCaml中进行跟踪和调试

f# - OCaml 函数少传入一个参数