Как мне расшифровать / удалить из HTML сущности в Erlang? - PullRequest
1 голос
/ 26 января 2012

Я делаю вызов REST и получаю этот XML обратно:

<replacement><![CDATA[this is &amp; ampersand]]></replacement>

Я вычеркнул бит, который меня действительно волнует:

this is &amp; ampersand

Как мнеТеперь расшифруйте этот фрагмент в (я не использую рыскания):

this is & ampersand

Ответы [ 2 ]

0 голосов
/ 26 января 2012

Это зависит от того, какой тип данных у вас есть.Если это текст ascii, вы можете заменить его знаком «&», как сказал @Odobenus. Росмарус сказал: если это юникод, то вы проделаете дополнительную работу.Посмотрите на этот проект или используйте стандартный unicode модуль.

0 голосов
/ 26 января 2012

например

repl([],Acc) -> lists:reverse(Acc);
repl([$&,$a,$m,$p,$;|T],Acc) -> repl(T,[$&|Acc]);
repl([H|T],Acc) -> repl(T,[H|Acc]).

проверка

repl("this is &amp; ampersand",[]).
"this is & ampersand"

(обновление) Если вам нужно заменить все сущности из строки cdata, вы можете добавить фиктивный начальный тег вокруг этой строки и проанализировать егокак XML.

Вид:

  {{_,_,_,_,_,_,_,_,Lst,_,_,_},_} = 
     xmerl_scan:string("<root>"++YourStingHere++"</root>"),
  lists:foldl(fun ({_,_,_,_,X,text},Acc) -> Acc ++ X end, [],Lst).

проверка:

 {{_,_,_,_,_,_,_,_,Lst,_,_,_},_} = 
         xmerl_scan:string("<root>"++"aaa V&amp;H &lt;- "++"</root>").
 lists:foldl(fun ({_,_,_,_,X,text},Acc) -> Acc ++ X end, [],Lst).

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