XML::Simple would probably not work here as it is designed for data-oriented XML and would not properly handle XML documents that include <p>some <i>mixed content</i> like this</p>.
As for this method being a problem for very large files, in that case the bottleneck would not be the processing time but more likely the time spent using the spell checker interractively. If that's really a problem (a huge file with very few spelling mistakes) you can always do it chunk by chunk using... say... XML::Twig ;--)