anchor.diff:  path(_, _, Default) ->
       Default.
   
  +-spec subelement(#xmlelement{}, binary()) -> #xmlelement{} | undefined.
   subelement(Element, Name) ->
       subelement(Element, Name, undefined).
   
  +-spec subelement(#xmlelement{}, binary(), Other) -> #xmlelement{} | Other.
   subelement(#xmlelement{body = Body}, Name, Default) ->
       case lists:keyfind(Name, #xmlelement.name, Body) of
           false ->
  
positive.code: -export([attr/2, attr/3]).
  -export([cdata/1]).
  
  %% gets the element contained in leftmost path
  path(Element, Path) ->
      path(Element, Path, undefined).
  
  path(Element, [], _) ->
      Element;
  path(#xmlelement{} = Element, [{element, Name} | Rest], Default) ->
  
negative.code:             Result
      end.
  
  -spec cdata(#xmlelement{}) -> binary().
  cdata(#xmlelement{body = Body}) ->
      list_to_binary([exml:unescape_cdata(C) || #xmlcdata{}=C <- Body]).
  
  -spec attr(#xmlelement{}, binary()) -> binary() | undefined.
  attr(Element, Name) ->
      attr(Element, Name, undefined).
  
  -spec attr(#xmlelement{}, binary(), Other) -> binary() | Other.
  attr(#xmlelement{attrs = Attrs}, Name, Default) ->
      case lists:keyfind(Name, 1, Attrs) of
          {Name, Value} ->
  