2012-01-25 5 views
1

私は、REST呼び出しを行うとバックこのXMLを受けている:私は今にこのスニペットをデコードするにはどうすればよいErlangでHTMLエンティティをデコード/エスケープするにはどうすればよいですか?

this is & ampersand 

:私が、私は本当に気ビットをsubstringedまし

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

(私はイチゴ腫を使用していない):例えば

this is & ampersand 

答えて

0

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

あなたは、CDATA文字列からすべてのエンティティを交換する必要がある場合、あなたはこの文字列の周りに偽の開始タグを追加して、XMLとしてそれを解析でき(更新)

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

をチェックします。

種類:

{{_,_,_,_,_,_,_,_,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 <- " 
+0

これは単一のケースには最適ですが、他のHTMLエンティティはどうですか? http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references既にライブラリに隠された関数があることを期待していました。 – PnzrDrgoon

+0

このアップデートは完全に動作します。ご助力ありがとうございます。 – PnzrDrgoon

+0

'include_lib(" xmerl/include/xmerl.hrl ")。を使用して組み込みのxmerlヘッダーファイルをインクルードすると、より読みやすく、将来証明されたコードになります。たとえば、 '{_、_、_、_、X、text}'は 'Foo#xmlText.value'になり、' {_、_、_、_、_、Lst、 、_、_} 'は' Foo#xmlElement.content'に置き換えることができます。 – dnet

0

それはあなたが持っているデータの種類によって異なります。これがASCIIテキストの場合は、@ Odobenus Rosmarusのように "&"と置き換えることができます。これがユニコードの場合は、さらにいくつかの作業を行います。 thisプロジェクトを参照するか、またはstandart unicodeモジュールを使用してください。

関連する問題