Дайте Эрлсом попробовать. Функция "erlsom: simple_form (XML)" даст вам {Node, Attrib, Value}:
{"something",[],
[{"Item",[],
[{"name",[],["The Name!"]},
{"reviews",[],
[{"review",[],
[{"review-by",[],["WE"]},{"review-points",[],["92"]}]},
{"review",[],
[{"review-by",[],["WS"]},{"review-points",[],["90"]}]}]}]}]}
Однако, если вы хотите отбросить атрибуты, вы можете написать забавную фразу для передачи в анализатор SAX erlsom или переформатировать вывод simple_form. Примерно так (переформатировать вывод):
-module(reader).
-compile(export_all).
convert(XML)->
case erlsom:simple_form(XML) of
{ok,{Node,_Attrib,Value},_}->
{Node,xml_to_kv(Value)};
Err->
Err
end.
xml_to_kv([{Node,_Attrib,Value}|T])->
[{Node,lists:flatten(xml_to_kv(Value))}|xml_to_kv(T)];
xml_to_kv(Value)->
Value.
Это даст следующий вывод:
{"something",
[{"Item",
[{"name","The Name!"},
{"reviews",
[{"review",[{"review-by","WE"},{"review-points","92"}]},
{"review",[{"review-by","WS"},{"review-points","90"}]}]}]}]}
Обратите внимание, я не проверял это на очень больших файлах XML. Вы должны выполнить несколько тестов и рассмотреть вопросы мема.