Я, вероятно, думаю, что вам нужно прочитать о Битовых синтаксических выражениях , Двоичные понимания и об этой библиотеке синтаксического анализатора XML под названием erlsom , скачайте ее здесь.Вы будете быстро освоены в том, что вы хотите сделать.
РЕДАКТИРОВАТЬ
XML-сообщение может достигать вашего сервера в виде двоичного файла или в виде строки.да, предоставленный анализатор xml может анализировать данные xml в терминах Erlang.Используя библиотеку
erlsom
, вот пример вашей структуры xml.У меня есть
erlsom
библиотека в пути кода.
C:\Windows\System32>erl
Eshell V5.9 (abort with ^G)
1> XML = "<msg><action type=\"xxx\"/>message</msg>".
"<msg><action type=\"xxx\"/>message</msg>"
2> erlsom:simple_form(XML).
{ok,{"msg",[],[{"action",[{"type","xxx"}],[]},"message"]},
[]}
3> {_,Parsed,_} = erlsom:simple_form(XML).
{ok,{"msg",[],[{"action",[{"type","xxx"}],[]},"message"]},
[]}
4> Parsed.
{"msg",[],[{"action",[{"type","xxx"}],[]},"message"]}
5> {_,_,[{_,[{_,ActionType}],_},Message]} = Parsed.
{"msg",[],[{"action",[{"type","xxx"}],[]},"message"]}
6> ActionType.
"xxx"
7> Message.
"message"
8>
Вы можете видеть выше, что это сводится к простому сопоставлению с образцом.Полученная структура даст вам что-то чистое, если отправители отправят правильно отформатированный xml data
.Если вы подозреваете, что неправильные данные XML попали на ваш сервер, вам нужно обернуть синтаксический анализатор в
try [CALL] of [GoodResult] -> [Action1] catch _Error:_Reason -> [Action2] end.
Обратите внимание, что если тело XML очень большое, вам нужно использовать SAX method
для анализа xml, чтобы избежать больших отпечатков памяти.Примеры SAX включены в документацию библиотеки.