anchor.diff:      EAttrs = [{AttrName, escape_attr(AttrVal)} ||
                    {AttrName, AttrVal} <- Attrs],
       Shift = lists:duplicate(Level, Indent),
  -    [Shift, "<", Name, attrs_to_iolist(EAttrs, []), "/>\n"];
  +    [Shift, "<", Name, attrs_to_iolist(EAttrs), "/>\n"];
   to_pretty_iolist_escape(#xmlel{name = Name, attrs = Attrs,
                                  children = [#xmlcdata{content = Content}]},
                           Level, Indent) ->
       EAttrs = [{AttrName, escape_attr(AttrVal)} ||
                    {AttrName, AttrVal} <- Attrs],
       Shift = lists:duplicate(Level, Indent),
  -    [Shift, "<", Name, attrs_to_iolist(EAttrs, []), ">",
  +    [Shift, "<", Name, attrs_to_iolist(EAttrs), ">",
        escape_cdata(Content), "</", Name, ">\n"];
   to_pretty_iolist_escape(#xmlel{name = Name, attrs = Attrs, children = Children},
                           Level, Indent) ->
       EAttrs = [{AttrName, escape_attr(AttrVal)} ||
                    {AttrName, AttrVal} <- Attrs],
       Shift = lists:duplicate(Level, Indent),
  -    [Shift, "<", Name, attrs_to_iolist(EAttrs, []), ">\n",
  +    [Shift, "<", Name, attrs_to_iolist(EAttrs), ">\n",
        [to_pretty_iolist_escape(C, Level+1, Indent) || C <- Children],
        Shift, "</", Name, ">\n"];
   to_pretty_iolist_escape(#xmlstreamstart{name = Name, attrs = Attrs},
  
positive.code: to_pretty_iolist_clean(#xmlel{name = Name, attrs = Attrs, children = []},
                         Level, Indent) ->
      Shift = lists:duplicate(Level, Indent),
      [Shift, "<", Name, attrs_to_iolist(Attrs, []), "/>\n"];
  to_pretty_iolist_clean(#xmlel{name = Name, attrs = Attrs,
                                children = [#xmlcdata{content = Content}]},
                         Level, Indent) ->
      Shift = lists:duplicate(Level, Indent),
      [Shift, "<", Name, attrs_to_iolist(Attrs, []), ">",
       Content, "</", Name, ">\n"];
  to_pretty_iolist_clean(#xmlel{name = Name, attrs = Attrs, children = Children},
                         Level, Indent) ->
      Shift = lists:duplicate(Level, Indent),
      [Shift, "<", Name, attrs_to_iolist(Attrs, []), ">\n",
       [to_pretty_iolist_clean(C, Level+1, Indent) || C <- Children],
       Shift, "</", Name, ">\n"];
  to_pretty_iolist_clean(#xmlstreamstart{name = Name, attrs = Attrs},
                         Level, Indent) ->
      Shift = lists:duplicate(Level, Indent),
      [Shift, "<", Name, attrs_to_iolist(Attrs, []), ">\n"];
  to_pretty_iolist_clean(#xmlstreamend{name = Name}, Level, Indent) ->
      Shift = lists:duplicate(Level, Indent),
      [Shift, "</", Name, ">\n"];
  
negative.code: to_iolist_clean(Elements) when is_list(Elements) ->
      lists:map(fun to_iolist_clean/1, Elements);
  to_iolist_clean(#xmlel{name = Name, attrs = Attrs, children = []}) ->
      ["<", Name, attrs_to_iolist(Attrs), "/>"];
  to_iolist_clean(#xmlel{name = Name, attrs = Attrs, children = Children}) ->
      ["<", Name, attrs_to_iolist(Attrs), ">",
       to_iolist_clean(Children),
       "</", Name, ">"];
  to_iolist_clean(#xmlstreamstart{name = Name, attrs = Attrs}) ->
      ["<", Name, attrs_to_iolist(Attrs), ">"];
  to_iolist_clean(#xmlstreamend{name = Name}) ->
      ["</", Name, ">"];
  to_iolist_clean(#xmlcdata{content = Content}) ->
  