XSLT Comment faire pour obtenir une valeur de l'attribut suivant-frère-nœud?
Supose que j'ai ce XML:
<Items>
<Car name="12">Mercedes</Car>
<Bike name="23">Gt</Bike>
<House name="gt">123</House>
<Skate name="as">111</Skate>
<Plane name="bb">5522</Plane>
<tv name="sss">Sony</tv>
</Items>
Et la transformation XSLT suivante:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="Items">
<table>
<xsl:for-each select="*[position() mod 2 != 0]">
<tr>
<td>
<xsl:value-of select="name()"/>
</td>
<td>
<xsl:value-of select="."/>
</td>
<td>
<xsl:value-of select="name(following-sibling::*)"/>
</td>
<td>
<xsl:value-of select="following-sibling::*"/>
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
La sortie Im obtenir est:
<table>
<tr>
<td>Car</td>
<td>Mercedes</td>
<td>Bike</td>
<td>Gt</td>
</tr>
<tr>
<td>House</td>
<td>123</td>
<td>Skate</td>
<td>111</td>
</tr>
<tr>
<td>Plane</td>
<td>5522</td>
<td>tv</td>
<td>Sony</td>
</tr>
</table>
Mais ce dont j'ai besoin est l'attribut @name
au lieu du nom de noeud... comment puis-je faire??
Ce dont j'ai besoin est: est-ce
<table>
<tr>
<td>12</td>
<td>Mercedes</td>
<td>23</td>
<td>Gt</td>
</tr>
<tr>
<td>gt</td>
<td>123</td>
<td>as</td>
<td>111</td>
</tr>
<tr>
<td>bb</td>
<td>5522</td>
<td>ss</td>
<td>sony</td>
</tr>
</table>
Je sais que dans le premier <td>
je peux utiliser @name
, mais comment puis-je obtenir de l'attribut "nom" de la suite de la fratrie nœud dans l'autre <td>
?
Vous devez vous connecter pour publier un commentaire.
Ce doit retourner le nom de l'attribut de la suite de la fratrie.
Modifier
Il semble
Est la façon correcte de le faire.
following-sibling::*/@name
renvoie la@name
pour tous après les frères et sœurs. Tu veux direfollowing-sibling::*[1]/@name
.[1]
est pris. Donc, la seule raison à l'index serait de spécifier tout autre indice que[1]
.[1]
en raison de la façon nodesets sont convertis en chaînes (uniquement la chaîne de valeur de la premier nœud est pris). Vous faut-il encore ajouter[1]
parce que c'est plus clair et généralement plus rapide.<xsl:value-of>
se comporte: comme nwellnhof dit, il convertit son argument de chaîne; dans le cas d'un ensemble de nœuds, cela ne concerne que le premier nœud.<xsl:apply-templates>
par exemple, serait de considérer tous les nœuds appariés.