前言
和银行打交道,还是不可避免会用到 xml。erlang 有一个 xml 解析工具名为 erlsom,可以做一些简单的解析。
代码
xml_to_map(Xml) ->
{ok, KVList, _LeftData} = erlsom:simple_form(Xml),
analyze([KVList], #{}).
analyze([], Map) ->
Map;
analyze([{Key, [], ValueList} | Tail], Map) ->
NewMap = maps:put(binary:list_to_bin(Key), analyze(ValueList, #{}), Map),
analyze(Tail, NewMap);
analyze([{_, [{_, Key}], ValueList} | Tail], Map) ->
NewMap = maps:put(binary:list_to_bin(Key), analyze(ValueList, #{}), Map),
analyze(Tail, NewMap);
analyze([Val], _Map) -> %%循环, 找到底层数据
unicode:characters_to_binary(Val).
这个解析方法会保持内部的数据结构,对于简单的 xml 可以做到正确的解析,并保持层次结构
<xml>val</xml> ---> #{<<"xml">> => val}
网友评论