Good point so how about:  
<pre>
@schema.validate(@xml).tap do |errors| 
  validation_error("#{errors.map(&:message).to_sentence}\n\n#{@xml.to_s}") unless soft
end.empty?
</pre>