J'ai un problème avec le formatage du fichier XML en utilisant XSLT pour créer du HTML. Généralement, je veux récupérer les valeurs séquentielles de chaque attribut contenu dans l'élément XML. Actuellement, il est codé en dur dans XSLT et je me rends compte que si mon fichier XML change, XSLT ne fera pas son travail. J'ai essayé d'utiliser quelque chose comme <xsl:value-of select="@(name(@*[1]))" />
pour récupérer la première valeur d'attribut de l'élément, mais cela ne fonctionne pas.XSLT récupérant séquentiellement la valeur d'attribut à partir du fichier XML
Comment faire?
Merci d'avance.
Voici comment il ressemble au moment:
<xsl:for-each select="testsuites/testsuite/testcase">
<xsl:if test="@failure='PASSED'">
<tr style="color:green;font-weight:bold">
<td style="text-align:center">
<xsl:value-of select="@classname" />
</td>
<td style="text-align:center">
<xsl:value-of select="@name" />
</td>
<td style="text-align:center">
<xsl:value-of select="@Plate" />
</td>
<td style="text-align:center">
<xsl:value-of select="@Distance" />
</td>
<td style="text-align:center">
<xsl:value-of select="@Side" />
</td>
<td style="text-align:center">
<xsl:value-of select="@Angle" />
</td>
<td style="text-align:center">
<xsl:value-of select="@failure" />
</td>
<td style="text-align:center">
<xsl:value-of select="failure/@message" />
</td>
</tr>
</xsl:if>
... and so one
Voici une partie de mon fichier XML:
<testsuites disabled="0" errors="0" failures="1" passes="16" skipped="0" tests="17" time="1">
<testsuite disabled="0" id="0" name="Bok" time="1" tests="4">
<testcase classname="XYZ" name="description" Plate="blah" Distance="A" Side="L" Angle="15" failure="PASSED">
<system-out/>
<system-err/>
</testcase>
<testcase classname="XYZ" name="description" Plate="blah" Distance="A" Side="L" Angle="60" failure="PASSED">
<system-out/>
<system-err/>
</testcase>
<testcase classname="XYZ" name="description" Plate="blah" Distance="A" Side="L" Angle="30" failure="PASSED">
<system-out/>
<system-err/>
</testcase>
<testcase classname="XYZ" name="description" Plate="blah" Distance="A" Side="L" Angle="60" failure="PASSED">
<system-out/>
<system-err/>
</testcase>
</testsuite>
... and so one
EDIT: Ok , comme @TimC a répondu que je ne suis pas besoin de parenthèses et le nom dans @(name(@*[1]))
et ça va pour moi.
Maintenant, le problème est de savoir comment faire une boucle qui seront des éléments itération de 1 à disons 7, je veux dire quelque chose comme ceci:
<xsl:for-each select="$var=1 to 7">
<td style="text-align:center">
<xsl:value-of select="@*[$var]" />
</td>
</xsl:for-each>
Dans votre exemple, l'échec n'est pas le premier attribut, en réalité il n'y a pas d'échec mais des échecs. – derloopkat
@derloopkat Les attributs ne sont pas ordonnés de toute façon, leur ordre dans le code source ne signifie rien. – Tomalak
bien, vous avez dit que vous voulez la première valeur d'attribut – derloopkat