Have I missed some obvious XSS vulnerabilities?
It would help if you explained exactly why you think this approach is more robust than using strip_tags. It will certainly be likely to be a lot slower.

From a quick inspection it doesn't seem to filter CSS behaviours nor data URIs.

If it were me I'd be building on to strip_tags rather than trying to start from scratch.