Вот почему не рекомендуется использовать такой стиль "кирпича", как:
<xsl:template match="cars[@element-type='recordset']/record">
<cars color="{color}">
<brand>
<xsl:value-of select="brand" />
</brandr>
<number>
<xsl:value-of select="number" />
</number>
</cars>
</xsl:template>
Механизм расширения XSLT, как и в любом языке с «наследованием», может воздействовать на результат «суперкласса» для дальнейшей обработки (даже второго проходного преобразования, предложенного ответом Мартина Хоннена ) , Но если вы используете этот стиль в импортированной таблице стилей:
<xsl:template match="cars[@element-type='recordset']/record">
<cars color="{color}">
<xsl:apply-templates/>
</cars>
</xsl:template>
<xsl:template match="record/brand|record/number">
<xsl:copy-of select="."/>
</xsl:template>
<xsl:template match="record/*"/>
Тогда вы можете просто добавить к приложенной таблице стилей
<xsl:template match="cars[@element-type='recordset']/record">
<cars color="{color}">
<xsl:apply-templates/>
<country>ROM</country>
</cars>
</xsl:template>
Или, если элемент country
может быть результатом другого дочернего элемента record
, вам понадобится простое правило:
<xsl:template match="record/country">
<xsl:copy-of select="."/>
</xsl:template>