Вы на 90% пути туда. Что вам нужно, это «шаблон личности»
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding ="utf-8" indent="yes" method="xml" version="1.0"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match='setting'>
<xsl:copy>
<xsl:apply-templates select="@*"/>
<value>
<xsl:value-of select='.'/>
</value>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Первый шаблон обрабатывает все узлы, копируя их в выходные данные. Однако шаблон «настройки», будучи более конкретным, вызывается для «настроек» узлов. Этот шаблон копирует сам узел и его атрибуты, а затем оборачивает значение в тег «значения».
Самым неинтуитивным в XSLT является то, что таблица стилей не является программой, которая управляет процессом. Вместо этого управляет входной XML-документ, а таблица стилей содержит инструкции, которые выбираются и выполняются в соответствии с тем, что находится во входных данных. Это называется «принудительной» обработкой. XSL-процессор передает данные в вашу таблицу стилей. XSLT имеет некоторые процедурные возможности, и вы можете написать таблицу стилей в стиле «тянуть», где таблица стилей пытается управлять процессом, но это сложнее и приводит к сложным в обслуживании таблицам стилей.
Edit:
Для включения разделов CDATA замените:
<xsl:value-of select='.' />
с
![CDATA[<xsl:value-of select='.' disable-output-escaping="yes"/>]]
(хотя это и не лучшее решение, поскольку оно всегда добавляет CDATA)