您不能“删除” CDATA,但可以粗略地实现所需的输出:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<Detail>
<xsl:variable name="before" select="substring-before(//Detail,'<div class="heading">')" />
<xsl:variable name="afteropen" select="substring-after(//Detail,'<div class="heading">')" />
<xsl:variable name="body" select="substring-before($afteropen, '</div>')" />
<xsl:variable name="after" select="substring-after($afteropen, '</div>')" />
<xsl:value-of select="concat($before, '<h1>', $body, '</h1>',$after)"
disable-output-escaping="yes" />
</Detail>
</xsl:template>
</xsl:stylesheet>
这适用于您尝试解析的第一种 div 类型,您可以遵循与第二种类似的内容。可以通过一些努力使其更通用。