Skip to content

Instantly share code, notes, and snippets.

@Vesnica
Created February 6, 2013 03:28
Show Gist options
  • Save Vesnica/4719995 to your computer and use it in GitHub Desktop.
Save Vesnica/4719995 to your computer and use it in GitHub Desktop.
CWMP
-module(cwmp).
-author("Wisher").
-email("hustitecwisher@gmail.com").
-export([create_model/1]).
-include_lib("xmerl/include/xmerl.hrl").
create_model({_, _, Xml}) ->
process(Xml, []).
process([], Result) ->
lists:reverse(Result);
process([{Tag, Attr, Content} | Rest], Result) ->
case lists:keyfind(name, 1, Attr) of
{name, Name} ->
Attr2 = lists:keydelete(name, 1, Attr),
case lists:keyfind(Tag, 1, Result) of
{Tag, TagList} ->
TR = lists:reverse(TagList),
T2 = [{Name, Attr2 ++ process(Content, [])} | TR],
R = lists:keystore(Tag, 1, Result, {Tag,
lists:reverse(T2)});
false ->
R = [{Tag,
[{Name, Attr2 ++ process(Content, [])}]} | Result]
end;
false ->
R = [{Tag, Attr ++ process(Content, [])} | Result]
end,
process(Rest, R).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment