我正在做一個REST調用,並接收該XML回:如何在Erlang中解碼/忽略HTML實體?
<replacement><![CDATA[this is & ampersand]]></replacement>
我substringed的是,我真正關心的一些有關:
this is & ampersand
如何我現在這個片段解碼成(我不使用雅司病):
this is & ampersand
我正在做一個REST調用,並接收該XML回:如何在Erlang中解碼/忽略HTML實體?
<replacement><![CDATA[this is & ampersand]]></replacement>
我substringed的是,我真正關心的一些有關:
this is & ampersand
如何我現在這個片段解碼成(我不使用雅司病):
this is & ampersand
例如
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 & 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&H <- "++"</root>").
lists:foldl(fun ({_,_,_,_,X,text},Acc) -> AcC++ X end, [],Lst).
"aaa V&H <- "
這要看什麼類型的數據,你有。如果這是一個ASCII文本,你可以用@Odobenus Rosmarus所說的「&」符號替換它,如果這是一個Unicode,那麼你會做一些額外的工作。請看this項目或使用標準unicode
模塊。
對單個案例來說這很好,但其他HTML實體呢? http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references我希望有一個函數已經隱藏在圖書館裏了。 – PnzrDrgoon
此更新將完美工作。非常感謝您的幫助。 – PnzrDrgoon
使用include_lib(「xmerl/include/xmerl.hrl」)包含內置的xmerl頭文件會產生更具可讀性和麪向將來的代碼。例如,「{_,_,_,_,X,text}」將變爲「Foo#xmlText.value」,並且「{_,_,_,_,_,_,_,_,Lst, ,_,_}'可以替換爲'Foo#xmlElement.content'。 – dnet