XSLT: Comment remplacer le premier frère par une concaténation de tous les frères et sœurs?
Lucie
J'ai du mal à mettre en œuvre une transformation XSL.
J'ai besoin de transformer ceci:
<records>
<item>
<id type="uid">1</id>
<name>Homepage</name>
<attr>AB308E</attr>
</item>
<item>
<id type="uid">5</id>
<name>Electronics</name>
<attr>F04550</attr>
</item>
<item>
<id type="uid">8</id>
<name>Accessories</name>
<attr>00EE80</attr>
</item>
</records>
dans ceci:
<records>
<item>
<id type="uid">1</id>
<category>Homepage - Electronics - Accessories</category>
<attr>AB308E</attr>
</item>
<item>
<id type="uid">5</id>
<name>Electronics</name>
<attr>F04550</attr>
</item>
<item>
<id type="uid">8</id>
<name>Accessories</name>
<attr>00EE80</attr>
</item>
</records>
Je sais que cela n'a pas beaucoup de sens sémantiquement parlant, mais c'est un hack dont j'ai besoin pour injecter des données d'une manière spécifique dans une interface.
Règle n ° 1: la name
balise du premier item
de chaque records
balise (il y a beaucoup d'enregistrements dans le fichier réel) se transforme category
et contient la concaténation de tous les noms d'éléments de la records
portée actuelle
Règle n ° 2: les item
balises qui ne sont pas le premier enfant de records
sont inchangées.
J'ai essayé d'utiliser des <xsl:value-of select="concat(' - ', .)"/>
règles mais je n'ai pas eu de chance.
Quelqu'un saurait-il comment y parvenir?
Vincent
Essaye ça:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="records/item[1]/name">
<category>
<xsl:for-each select="../../item/name">
<xsl:value-of select="." />
<xsl:if test="position() != last()">
<xsl:value-of select="' - '" />
</xsl:if>
</xsl:for-each>
</category>
</xsl:template>
</xsl:stylesheet>