Такие задачи решаются с помощью шаблона преобразования идентификаторов, который является
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
, а затем путем добавления шаблонов для элементов, которые необходимо изменить, например,
<xsl:template match="foo">
<bar>
<xsl:apply-templates select="@* | node()"/>
</bar>
</xsl:template>
меняет foo
наbar
элементов и / или
<xsl:template match="foobar"/>
удаляет foobar
элементов.
Чтобы дать вам еще один пример, например, если мы хотим скопировать baz
элементы с их содержимым, ноЕсли вы хотите добавить элемент new
, мы можем добавить шаблон
<xsl:template match="baz">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
<new>...</new>
</xsl:copy>
</xsl:template>
Пока вы сохраняете преобразование идентичности (с apply-templates) для всего, что вы не хотите изменять, вы можете довольнохорошо структурируйте свою таблицу стилей, написав шаблон для каждого изменяемого элемента.