xmerl fix

Vlad Dumitrescu vlad_dumitrescu@REDACTED
Wed Apr 10 13:18:50 CEST 2002

Hi all,

There is a thing about xmerl that I stumbled upon, in the handling of the
simple-xml format. It seems that in {Tag, Content}, Content must be an atom,
a {Tag...} tuple or a list beginning with an integer (text). But this makes
building something like "This is <em>quite</em> fun" awkward:
"This is " ++ {em, "quite"} ++ " fun"   instead of the nicer and more
natural (I think)
["This is ", {em, "quite"}, " fun"]

In case my pooint of view is accepted, I include a quick-and-dirty diff on
xmerl.erl, a very ugly hack but I couldn't come up with a nicer one without
rewriting a lot more.

best regards,

> expand_content(Content = [H|_], Pos, Parents) when list(H) ->
>     case catch list_to_binary(Content) of
>       {'EXIT', _} ->
>           %% mixed content
>           {Text, Rest} = collect_text(lists:flatten(Content)),
>           [#xmlText{pos = Pos,
>                     parents = Parents,
>                     value = Text}|expand_content(Rest, Pos+1, Parents)];
>       Bin ->
>           [#xmlText{pos = Pos,
>                     parents = Parents,
>                     value = binary_to_list(Bin)}]
>     end;
> collect_text([H|T], Acc) when list(H) ->
>     collect_text(T, [lists:reverse(H)|Acc]);

More information about the erlang-questions mailing list