Проблема с использованием <xsl:apply-templates/>
.Это сокращение для <xsl:apply-templates select="node()" />
, где node()
выбирает элементы, текстовые узлы, комментарии и инструкции по обработке.Он не выбирает атрибуты.
Вам необходимо заменить <xsl:apply-templates/>
этим, чтобы затем он выбрал атрибуты
<xsl:apply-templates select="@*|node()" />
Также обратите внимание, что в шаблоне, соответствующем @audience
, выдолжен делать <xsl:value-of select="."/>
вместо <xsl:value-of select="@audience"/>
, поскольку вы уже позиционированы на атрибуте аудитории, поэтому просто хотите получить текущее значение.
<xsl:template match="@audience">
<div>
<xsl:attribute name="audience">
<xsl:value-of select="."/>
</xsl:attribute>
<xsl:apply-templates/>
</div>
</xsl:template>
Или, что еще лучше, используйте здесь шаблоны значений атрибутов
<xsl:template match="@audience">
<div audience="{.}">
<xsl:apply-templates/>
</div>
</xsl:template>