[XSLT]памагите с простой задачкой [closed]

sergei1969

нужно при помощи xslt заменить в xml название узла, конкретнее все узлы A заменить на <название родителя>A
пример:
 
<test>
<qwe>
<A>
<abc>asd</abc>
<def>123</def>
</A>
<B>2312</B>
</qwe>
<rty>
<A>
<abc>345345</abc>
<def>asdfasdf</def>
</A>
<B>sdas</B>
</rty>
<zxc>sdfasd</zxc>
</test>
надо получить
 
<test>
<qwe>
<qweA>
<abc>asd</abc>
<def>123</def>
</qweA>
<B>2312</B>
</qwe>
<rty>
<rtyA>
<abc>345345</abc>
<def>asdfasdf</def>
</rtyA>
<B>sdas</B>
</rty>
<zxc>sdfasd</zxc>
</test>

artimon

<xsl:template match="A">
<xsl:element name="{concat(../name'A')}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>

Как-то так.

sergei1969

при этом херятся все остальные теги, которые не А

artimon

Для остальных надо написать что-то типа:
<xsl:template match="*">
<xsl:element name="{name}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>

Но при этом похерятся ещё и все атрибуты у всех тегов.

Dasar


<xsl:template match="*|@*|node">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>

artimon

Точно. Забыл про copy

sergei1969

во, так уже лучше
а на счёт name="{concat(../name'A')}" можно поконкретнее? так ошибку выдаёт

artimon

А так?
name="{concat(name(..name}"

sergei1969

отлично, спасибо
Оставить комментарий
Имя или ник:
Комментарий: