如何在Erlang中解码/取消HTML实体?

时间:2012-01-25 23:04:25

标签: html xml erlang

我正在进行REST调用并收回此XML:

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

我已经把我真正关心的那一点包括在内:

this is &amp; ampersand

我现在如何将此片段解码为(我不使用偏航):

this is & ampersand

2 个答案:

答案 0 :(得分:0)

例如

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 <- "

答案 1 :(得分:0)

这取决于您拥有的数据类型。如果这是ascii文本,您可以将其替换为“&amp;”像@Odobenus Rosmarus这样的标志说,如果这是一个unicode,那么你会做一些额外的工作。查看this项目或使用标准unicode模块。