Возможный анализ XML - PullRequest
       3

Возможный анализ XML

0 голосов
/ 12 марта 2012

У меня вопрос новичка.

Я пытаюсь проанализировать сообщение xml с сопоставлением с образцом в функциях

Пример сообщения:

    <msg> <action type="xxx"... />  </msg>

Что я хотел бы сделатьis (вроде)

    decode_msg_in( << $<,$m,$s,$g,$>, Message/binary, $<,$/,$m,$s,$g,$> >>, R ) ->

Декодирование не работает (очевидно, это всего лишь указание на то, что я хотел бы сделать)

Возможно ли это вообще?

У кого-нибудь есть идея?Или мне нужно «перебрать» все сообщение в виде списка, создавая новые «слова»?

Regards / P

1 Ответ

2 голосов
/ 12 марта 2012

Я, вероятно, думаю, что вам нужно прочитать о Битовых синтаксических выражениях , Двоичные понимания и об этой библиотеке синтаксического анализатора 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 включены в документацию библиотеки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...