在Erlang中传递参数并解析xml

时间:2014-09-03 18:20:37

标签: xml recursion erlang

你好我还在学习Erlang,我试图通过各种功能传递一个以上的论点,但我正在撞墙。

开始我使用xmerl.hrl来解析xml。我通过erlfile:process_xml(" filename.xml")命令行调用process_xml(Doc)。

process_xml(Doc) ->
makeBottom1(Doc,"yup got here").

从这里开始,进程调用makeBottom1传入doc和一个字符串,以便稍后测试输出。

makeBottom1(E = #xmlElement{name='resource'}, Derp) -> "Got to resource";
makeBottom1(E, Derp) -> ["<h1>BURP</h1>", Derp, built_in_rules( fun makeBottom1/2 , [E, Derp] ), "-" ].

我希望它能够回归&#34;得到资源&#34;很多次,但它似乎永远不会绊倒那个函数调用。

它的回报是:

["<h1>BURP</h1>","yup got here",[],"-"]

我应该使用不同的xml解析器来实现我想要的功能吗?我只是犯了一个菜鸟的错误吗?

1 个答案:

答案 0 :(得分:1)

函数built_in_rules需要2个参数:一个带有arity 1(一个参数)的函数和一个XML节点。由于您的参数不符合the function clauses描述的模式,因此您将触发一个只能返回空列表的全部捕获条件。

要解决此问题,您需要更改使用built_in_rules的方式。请尝试以下方法:

built_in_rules(fun(Child) -> makeBottom1(Child, Derp) end, E)

我们不是试图传递一个arity为2的函数并期望built_in_rules知道如何处理它,而是传递一个带有arity 1的函数,built_in_rules知道如何知道如何使用,并使用闭包来添加我们的第二个参数。我们还修改了函数调用的第二个参数,以便我们只传入当前的XML节点。