Легко.
<xsl:template match="a">
<A>
<xsl:copy-of select="@*|b/@*" />
<xsl:apply-templates /><!-- optional -->
</A>
</xsl:template>
<xsl:apply-templates />
не требуется, если у вас нет дочерних элементов <a>
, которые вы хотите обработать.
Примечание
- использование
<xsl:copy-of>
для вставки исходных узлов в выходные данные без изменений - использование оператора объединения
|
для одновременного выбора нескольких несвязанных узлов - , которые можно скопировать узлы атрибутовк новому элементу, если это первое, что вы делаете - прежде чем добавлять дочерние элементы.
РЕДАКТИРОВАТЬ: если вам необходимо сузить , какие атрибутывы копируете, и что вы оставляете в покое, используйте это (или его вариант):
<xsl:copy-of select="(@*|b/@*)[
name() = 'q' or name() = 'x' or name() = 'y' or name() = 'z'
]" />
или даже
<xsl:copy-of select="(@*|b/@*)[
contains('|q|x|y|z|', concat('|', name(), '|'))
]" />
Обратите внимание, как скобки применяют предикат ко всем сопоставленнымузлы.