Honestly, it is a very bad idea to have wellformed XML flattened out as a text string by putting it in a CDATA section.
It then no longer IS XML, though it looks like it
If you ever need that XML to be processed as XML you have to deserialize it again.
It is a bad idea.
If you can, you should change the XML at the source and not have the CDATA section, that would be the way to go
If that can't be done, I would introduce a normalisation step.
This means that you would have two XSLTs in a row.
The first XSLT would be the one I attached.
After that the CDATA would be gone because of the disable-output-escaping
After that you can use your XSLT on good data
I hope you can set up a series of XSLTs.
If that can't be done, you will need some complex recursive text processing.
XSLT is not meant for that, but if you need this third option, I will write one to show you how