As Leif said, the content in the CDATA
section is not parsed, so it's just text, even though it looks like markup. You'd have to parse it. Which you could do using Saxon (9.1 or later commercial editions) and saxon:parse
. You'd then find it's not well formed, so you'd probably have to resort to a parser such as TagSoup to parse it.
You could also treat it as a string:
<xsl:stylesheet version="1.0"
xmlns:saxon="http://saxon.sf.net/"
exclude-result-prefixes="saxon"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<Root>
<!--xsl:value-of select="saxon:parse(/books/book/content)"/-->
<xsl:for-each select="books/book/content">
<xsl:value-of select="
substring-before(
substring-after( . , '>' ), '<' ) "/>
</xsl:for-each>
</Root>
</xsl:template>
</xsl:stylesheet>