diff --git a/ChangeLog b/ChangeLog index 4629a3ce8..a4f07cdc6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2007-07-30 Mickael Remond + * src/xml_stream.erl: Group CDATA on a single xmlcdata + node (splitting is not relevant as dependant on TCP/IP packet + fragmentation) (EJAB-292). + * src/xml.erl: Remove compilation warnings (EJAB-290). * src/xml.erl: Do not crypt binary CData, but enclose the value in diff --git a/src/xml_stream.erl b/src/xml_stream.erl index c923b6ae7..7dedbeb14 100644 --- a/src/xml_stream.erl +++ b/src/xml_stream.erl @@ -59,6 +59,15 @@ process_data(CallbackPid, Stack, Data) -> case Stack of [El] -> [El]; + %% Merge CDATA nodes if they are contiguous + %% This does not change the semantic: the split in + %% several CDATA nodes depends on the TCP/IP packet + %% fragmentation + [{xmlelement, Name, Attrs, + [{xmlcdata, PreviousCData}|Els]} | Tail] -> + [{xmlelement, Name, Attrs, + [{xmlcdata, concat_binary([PreviousCData, CData])} | Els]} | Tail]; + %% No previous CDATA [{xmlelement, Name, Attrs, Els} | Tail] -> [{xmlelement, Name, Attrs, [{xmlcdata, CData} | Els]} | Tail];