Richard,
Try out Jeffs tally table method, if you haven't already, you should find it's even faster.
I got the following times on a 9000 element source string.
------------ XML Method ------------
(9000 row(s) affected)
SQL Server Execution Times:
CPU time = 235 ms, elapsed time = 228 ms.
------------ Tally table method ------------
(9000 row(s) affected)
SQL Server Execution Times:
CPU time = 156 ms, elapsed time = 159 ms.