⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmerl_lib.erl

📁 OTP是开放电信平台的简称
💻 ERL
📖 第 1 页 / 共 3 页
字号:
empty_tag(TagStr, Attrs) ->    ["<", TagStr, attributes(Attrs), "/>"].end_tag(Tag) when atom(Tag) ->    end_tag(atom_to_list(Tag));end_tag(TagStr) ->    ["</", TagStr, ">"].attributes(Attrs) ->    [attr_string(A) || A <- Attrs].attr_string(#xmlAttribute{name = K, value = V}) ->    [" ", atom_to_list(K), "=\"", export_attribute(V), "\""].is_empty_data([]) ->    true;is_empty_data([X | Xs]) ->    case is_empty_data(X) of	false ->	    false;	true ->	    is_empty_data(Xs)    end;is_empty_data(_) ->    false.%% Removing normalised whitespace-only text segments.remove_whitespace([#xmlText{value = " "} | Data]) ->    remove_whitespace(Data);remove_whitespace([E = #xmlElement{content = Content} | Data]) ->    [E#xmlElement{content = remove_whitespace(Content)}     | remove_whitespace(Data)];remove_whitespace([Other | Data]) ->    [Other | remove_whitespace(Data)];remove_whitespace([]) ->    [].%%% ----------------------------------------------------------------------------%%% funs traversing the xmerl tree left-right and top-down%% mapxml%% Fun is fun(Old#xmlElement) -> New#xmlElementmapxml(Fun, #xmlElement{}= E) ->    C1 = Fun(E),    C2 = mapxml(Fun,lists:flatten(C1#xmlElement.content)),    C1#xmlElement{content=C2};mapxml(Fun, List) when list(List) ->    AFun = fun(E) -> mapxml(Fun, E) end,    lists:map(AFun, List);mapxml(Fun, E) ->    Fun(E).%% foldxml%% Fun is fun(#xmlElement, OldAccu) -> NewAccufoldxml(Fun, Accu0, #xmlElement{content=C}=E) ->    Accu1 = Fun(E, Accu0),    foldxml(Fun, Accu1, C);foldxml(Fun, Accu, List) when list(List) ->    AFun = fun(E,A) -> foldxml(Fun, A, E) end,    lists:foldl(AFun, Accu, List);foldxml(Fun, Accu, E) ->    Fun(E, Accu).%% mapfoldxml%% Fun is fun(Old#xmlElement, OldAccu) -> {New#xmlElement, NewAccu}mapfoldxml(Fun, Accu0, #xmlElement{}=E) ->    {C1,Accu1} = Fun(E, Accu0),    {C2,Accu2} = mapfoldxml(Fun, Accu1, lists:flatten(C1#xmlElement.content)),    {C1#xmlElement{content=C2},Accu2};mapfoldxml(Fun, Accu, List) when list(List) ->    AFun = fun(E,A) -> mapfoldxml(Fun, A, E) end,    lists:mapfoldl(AFun, Accu, List);mapfoldxml(Fun, Accu, E) ->    Fun(E,Accu).%%% @spec detect_charset(T::list()) -> charset_info()%%% @equiv detect_charset(undefined,T)detect_charset(Content) ->    detect_charset(undefined,Content).%%% FIXME! Whatabout aliases etc? Shouldn't transforming with ucs be optional?%%% @spec detect_charset(ExtCharset::atom(),T::list()) -> charset_info()%%% @doc Automatically decides character set used in XML document.%%%  charset_info() is%%%  <table>%%%    <tr><td><code>{auto,'iso-10646-utf-1',Content} |</code></td></tr>%%%    <tr><td><code>{external,'iso-10646-utf-1',Content} |</code></td></tr>%%%    <tr><td><code>{undefined,undefined,Content} |</code></td></tr>%%%    <tr><td><code>{external,ExtCharset,Content}</code></td></tr>%%%  </table>%%%   ExtCharset is any externally declared character set (e.g. in HTTP%%%   Content-Type header) and Content is an XML Document.%%% detect_charset(ExtCharset,Content) when list(ExtCharset) ->    %% FIXME! Don't allow both atom and list for character set names    detect_charset(list_to_atom(ExtCharset),Content);detect_charset(ExtCharset,Content) ->    case autodetect(ExtCharset,Content) of	{auto,Content1} ->	    {auto,'iso-10646-utf-1',Content1};	{external,Content1} ->	    {external,'iso-10646-utf-1',Content1};	{undefined,_} ->	    {undefined,undefined,Content};	{ExtCharset, Content} ->	    {external,ExtCharset,Content}    end.%%------------------------------------------------------------------------------%% Auto detect what kind of character set we are dealing with and transform%% to Erlang integer Unicode format if found.%% Appendix F, Page 56-57, XML 1.0 W3C Recommendation 6 October 2000%% (http://www.w3.org/TR/REC-xml)%% 00 00 00 3C ( "<" in UCS-4 big-endian)%% 3C 00 00 00 ( "<" in UCS-4 little-endian)%% FE FF (UTF-16 - big-endian Mark)%% FF FE (UTF-16 - little-endian Mark)%% 00 3C 00 3F ( "<?" in UTF-16 big-endian)%% 3C 00 3F 00 ( "<?" in UTF-16 big-endian)%% 3C 3F (7-bit,8-bit or mixed width encoding)%% 4C 6F A7 94 (EBCDIC) - Not Implemented!!!!%% Check byte-order mark and transform to Unicode, Erlang integer%%% --- With byte-order markautodetect(undefined,[0,0,16#fe,16#ff | Input]) ->    {auto, xmerl_ucs:from_ucs4be(Input)};autodetect('iso-10646-utf-1',[0,0,16#fe,16#ff | Input]) ->    {external, xmerl_ucs:from_ucs4be(Input)};autodetect(undefined,[16#ff,16#fe,0,0 | Input]) ->    {auto, xmerl_ucs:from_ucs4le(Input)};autodetect('iso-10646-utf-1',[16#ff,16#fe,0,0 | Input]) ->    {external, xmerl_ucs:from_ucs4le(Input)};autodetect(undefined,[16#fe,16#ff | Input]) ->    {auto, xmerl_ucs:from_utf16be(Input)};autodetect('utf-16be',[16#fe,16#ff | Input]) ->    {external, xmerl_ucs:from_utf16be(Input)};autodetect(undefined,[16#ff,16#fe | Input]) ->    {auto, xmerl_ucs:from_utf16le(Input)};autodetect('utf-16le',[16#ff,16#fe | Input]) ->    {external, xmerl_ucs:from_utf16le(Input)};autodetect(undefined,[16#ef,16#bb,16#bf | Input]) ->    {auto, xmerl_ucs:from_utf8(Input)};autodetect('utf-8',[16#ef,16#bb,16#bf | Input]) ->    {external, xmerl_ucs:from_utf8(Input)};autodetect('utf-8',[16#ff,16#fe | Input]) ->    {external, xmerl_ucs:from_utf16le(Input)};autodetect('utf-8',[16#fe,16#ff | Input]) ->    {external, xmerl_ucs:from_utf16be(Input)};%%% --- Without byte-order markautodetect(undefined,[0,0,0,16#3c|Input]) ->    {auto, xmerl_ucs:from_ucs4be([0,0,0,16#3c|Input])};autodetect('iso-10646-utf-1',[0,0,0,16#3c|Input]) ->    {external, xmerl_ucs:from_ucs4be([0,0,0,16#3c|Input])};autodetect(undefined,[16#3c,0,0,0|Input]) ->    {auto, xmerl_ucs:from_ucs4le([16#3c,0,0,0|Input])};autodetect('iso-10646-utf-1',[16#3c,0,0,0|Input]) ->    {external, xmerl_ucs:from_ucs4le([16#3c,0,0,0|Input])};autodetect(undefined,[0,16#3c,0,16#3f | Input]) ->    {auto, xmerl_ucs:from_utf16be([0,16#3c,0,16#3f|Input])};autodetect('utf-16be',[0,16#3c,0,16#3f | Input]) ->    {external, xmerl_ucs:from_utf16be([0,16#3c,0,16#3f|Input])};autodetect(undefined,[16#3c,0,16#3f,0 | Input]) ->    {auto, xmerl_ucs:from_utf16le([16#3c,0,16#3f,0|Input])};autodetect('utf-16le',[16#3c,0,16#3f,0 | Input]) ->    {external, xmerl_ucs:from_utf16le([16#3c,0,16#3f,0|Input])};autodetect(ExtCharset,Content) ->    {ExtCharset, Content}.is_ncname(A) when atom(A) ->    is_ncname(atom_to_list(A));is_ncname([$_|T]) ->    is_name1(T);is_ncname([H|T]) ->    case is_letter(H) of	true ->	    is_name1(T);	_ -> false    end.is_name(A) when atom(A) ->    is_name(atom_to_list(A));is_name([$_|T]) ->    is_name1(T);is_name([$:|T]) ->    is_name1(T);is_name([H|T]) ->    case is_letter(H) of	true ->	    is_name1(T);	_ -> false    end.is_name1([]) ->    true;is_name1([H|T]) ->    case is_namechar(H) of	true ->	    is_name1(T);	_ -> false    end.				% =======%%% UNICODE character definitions%%%%%%%% [2] Charis_char(16#09) -> true;is_char(16#0A) -> true;is_char(16#0D) -> true;is_char(X) when X >= 16#20, X =< 16#D7FF -> true;is_char(X) when X >= 16#E000, X =< 16#FFFD -> true;is_char(X) when X >= 16#10000, X =< 16#10FFFF -> true;is_char(_) -> false.%% [4] NameCharis_namechar(X) when X == $. ; X == $- ; X == $_ ; X == $: ->    true;is_namechar(X) ->    case is_letter(X) of	true -> true;	false ->	    case is_digit(X) of		true -> true;		false ->		    case is_combining_char(X) of			true -> true;			false ->			    is_extender(X)		    end	    end    end.%% [84] Letteris_letter(X) ->    case is_base_char(X) of	false ->	    is_ideographic(X);	true ->	    true    end.%% [85] BaseCharis_base_char(X) when X >= 16#0041, X =< 16#005A -> true;is_base_char(X) when X >= 16#0061, X =< 16#007A -> true;is_base_char(X) when X >= 16#00C0, X =< 16#00D6 -> true;is_base_char(X) when X >= 16#00D8, X =< 16#00F6 -> true;is_base_char(X) when X >= 16#00F8, X =< 16#00FF -> true;is_base_char(X) when X >= 16#0100, X =< 16#0131 -> true;is_base_char(X) when X >= 16#0134, X =< 16#013E -> true;is_base_char(X) when X >= 16#0141, X =< 16#0148 -> true;is_base_char(X) when X >= 16#014A, X =< 16#017E -> true;is_base_char(X) when X >= 16#0180, X =< 16#01C3 -> true;is_base_char(X) when X >= 16#01CD, X =< 16#01F0 -> true;is_base_char(X) when X >= 16#01F4, X =< 16#01F5 -> true;is_base_char(X) when X >= 16#01FA, X =< 16#0217 -> true;is_base_char(X) when X >= 16#0250, X =< 16#02A8 -> true;is_base_char(X) when X >= 16#02BB, X =< 16#02C1 -> true;is_base_char(16#0386) -> true;is_base_char(X) when X >= 16#0388, X =< 16#038A -> true;is_base_char(16#038C) -> true;is_base_char(X) when X >= 16#038E, X =< 16#03A1 -> true;is_base_char(X) when X >= 16#03A3, X =< 16#03CE -> true;is_base_char(X) when X >= 16#03D0, X =< 16#03D6 -> true;is_base_char(16#03DA) -> true;is_base_char(16#03DC) -> true;is_base_char(16#03DE) -> true;is_base_char(16#03E0) -> true;is_base_char(X) when X >= 16#03E2, X =< 16#03F3 -> true;is_base_char(X) when X >= 16#0401, X =< 16#040C -> true;is_base_char(X) when X >= 16#040E, X =< 16#044F -> true;is_base_char(X) when X >= 16#0451, X =< 16#045C -> true;is_base_char(X) when X >= 16#045E, X =< 16#0481 -> true;is_base_char(X) when X >= 16#0490, X =< 16#04C4 -> true;is_base_char(X) when X >= 16#04C7, X =< 16#04C8 -> true;is_base_char(X) when X >= 16#04CB, X =< 16#04CC -> true;is_base_char(X) when X >= 16#04D0, X =< 16#04EB -> true;is_base_char(X) when X >= 16#04EE, X =< 16#04F5 -> true;is_base_char(X) when X >= 16#04F8, X =< 16#04F9 -> true;is_base_char(X) when X >= 16#0531, X =< 16#0556 -> true;is_base_char(16#0559) -> true;is_base_char(X) when X >= 16#0561, X =< 16#0586 -> true;is_base_char(X) when X >= 16#05D0, X =< 16#05EA -> true;is_base_char(X) when X >= 16#05F0, X =< 16#05F2 -> true;is_base_char(X) when X >= 16#0621, X =< 16#063A -> true;is_base_char(X) when X >= 16#0641, X =< 16#064A -> true;is_base_char(X) when X >= 16#0671, X =< 16#06B7 -> true;is_base_char(X) when X >= 16#06BA, X =< 16#06BE -> true;is_base_char(X) when X >= 16#06C0, X =< 16#06CE -> true;is_base_char(X) when X >= 16#06D0, X =< 16#06D3 -> true;is_base_char(16#06D5) -> true;is_base_char(X) when X >= 16#06E5, X =< 16#06E6 -> true;is_base_char(X) when X >= 16#0905, X =< 16#0939 -> true;is_base_char(16#093D) -> true;is_base_char(X) when X >= 16#0958, X =< 16#0961 -> true;is_base_char(X) when X >= 16#0985, X =< 16#098C -> true;is_base_char(X) when X >= 16#098F, X =< 16#0990 -> true;is_base_char(X) when X >= 16#0993, X =< 16#09A8 -> true;is_base_char(X) when X >= 16#09AA, X =< 16#09B0 -> true;is_base_char(16#09B2) -> true;is_base_char(X) when X >= 16#09B6, X =< 16#09B9 -> true;is_base_char(X) when X >= 16#09DC, X =< 16#09DD -> true;is_base_char(X) when X >= 16#09DF, X =< 16#09E1 -> true;is_base_char(X) when X >= 16#09F0, X =< 16#09F1 -> true;is_base_char(X) when X >= 16#0A05, X =< 16#0A0A -> true;is_base_char(X) when X >= 16#0A0F, X =< 16#0A10 -> true;is_base_char(X) when X >= 16#0A13, X =< 16#0A28 -> true;is_base_char(X) when X >= 16#0A2A, X =< 16#0A30 -> true;is_base_char(X) when X >= 16#0A32, X =< 16#0A33 -> true;is_base_char(X) when X >= 16#0A35, X =< 16#0A36 -> true;is_base_char(X) when X >= 16#0A38, X =< 16#0A39 -> true;is_base_char(X) when X >= 16#0A59, X =< 16#0A5C -> true;is_base_char(16#0A5E) -> true;is_base_char(X) when X >= 16#0A72, X =< 16#0A74 -> true;is_base_char(X) when X >= 16#0A85, X =< 16#0A8B -> true;is_base_char(16#0A8D) -> true;is_base_char(X) when X >= 16#0A8F, X =< 16#0A91 -> true;is_base_char(X) when X >= 16#0A93, X =< 16#0AA8 -> true;is_base_char(X) when X >= 16#0AAA, X =< 16#0AB0 -> true;is_base_char(X) when X >= 16#0AB2, X =< 16#0AB3 -> true;is_base_char(X) when X >= 16#0AB5, X =< 16#0AB9 -> true;is_base_char(16#0ABD) -> true;is_base_char(16#0AE0) -> true;is_base_char(X) when X >= 16#0B05, X =< 16#0B0C -> true;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -