2

次のようなxml文字列があります

 S = "<B xmns=\"som2\"> <a other='v1' more='v2'/><b some=\"v3/></B>".

終了タグを削除したい</B>

 S2 = "<B xmns=\"som2\"> <a other='v1' more='v2'/><b some=\"v3/>"

どうすればこれを達成できますか?

4

1 に答える 1

6

特定の文字列リテラルのみを削除したい場合は</B>、サブリストを取得するとうまくいきます。

S = "<B xmns=\"som2\"> <a other='v1' more='v2'/><b some=\"v3\"/></B>",
lists:sublist(S, 1, length(S) - 4).
%%= "<B xmns=\"som2\"> <a other='v1' more='v2'/><b some=\"v3\"/>"

より一般的なアプローチが必要な場合は、次のre:replace/3関数を使用できます。

S1 = re:replace(S, "</B>", ""),
S2 = iolist_to_binary(S1),
binary_to_list(S2).
%%= "<B xmns=\"som2\"> <a other='v1' more='v2'/><b some=\"v3\"/>"

アップデート

コメントで述べたように、オプションを提供する{return, list}方がはるかにクリーンです。

re:replace(S, "</B>", "", [{return,list}]).
%%= "<B xmns=\"som2\"> <a other='v1' more='v2'/><b some=\"v3\"/>"
于 2014-09-06T20:21:33.480 に答える