Насколько я понимаю, кажется, что вы застряли, когда в DTD разрешен смешанный тип контента, и вы обрабатываете, когда появляются CDATA и сталкиваются с проблемой, если есть дополнительные дочерние элементы.
Если вы полагаете, чтобы pu sh весь дочерний элемент внутри p
, тогда вы можете использовать <xsl:apply-templates/>
и обрабатывать дополнительные данные в шаблоне.
Если вам требуется только обработать код для обновления CDATA, используйте
<p>
<xsl:if test="text()">
<xsl:value-of select="text()"/>
</xsl:if>
</p>
вместо
<p><xsl:value-of select="."/></p>