I am afraid you have the usual XML::Parser problem:
the Char handler does not garantee that it will
return the entire content of an element at once: it
can be called several times for a single string,
depending on entities being present and on the overall
length of the document.
So if one of the title includes an entity, as in "I Love B &D Perl", the char handler will be called 3 times: once with 'I Love B', once with '&' and once with 'D Perl', and you will only get the last part in $post->{title}.
The solution in this case is simply to replace
$post->{'title'} = $title; by
$post->{'title'} .= $title;, but look for
a more generic solution in the review.