Les fonctions XPath position() et last() sont ignorées si vous utilisez les directement comme arguments de fonction (fonction standard, de script et d'extension) XSLT dans les expressions de requête de XPath sont utilisées dans les feuilles de style XSLT.
Utiliser des variables XSLT pour stocker les valeurs ces fonctions renvoient. Vous pouvez ensuite utiliser les variables XSLT comme les arguments de fonction XSLT dans les expressions XPath requête qui sont utilisées dans la feuille de style.
Notez que ce problème ne pas se produire lorsque les fonctions position() et last() sont utilisées dans un prédicat dans une expression qui est fourni comme un argument de fonction XSLT.
Le code suivant permet de créer et ajouter une feuille de style XSLT nommée Repro.xsl au projet. Étudier les commentaires en ligne à comprendre la fonctionnalité du code dans la feuille de style :
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="Values" match="value" use="."/>
<xsl:template match="Data">
<Data>
<!--
Use the XSLT key() function to identify and output
value elements whose value matches their position in the source XML.
The following will not work because the position() function is supplied
directly as an argument of the key() function.
-->
<ValuesThatMatchPosition>
<xsl:for-each select="value">
<xsl:if test="key('Values',position())">
<value><xsl:value-of select="."/></value>
</xsl:if>
</xsl:for-each>
</ValuesThatMatchPosition>
<!--
The position() function works correctly when used in a predicate in an expression supplied
as an XSLT function (the format-number function is used in this sample) argument.
The select expression in the following line will retrieve the value of the 3rd value element
in the source XML.
-->
<Position3Value><xsl:value-of select="format-number(value[position()=3],'0')"/></Position3Value>
</Data>
</xsl:template>
</xsl:stylesheet>
Collez le code suivant dans la procédure Sub Main() dans Module1.vb pour exécuter la transformation XSLT en appliquant Repro.xsl à Repro.xml :
Dim transform As New System.Xml.Xsl.XslTransform()
transform.Load("..\Repro.xsl")
transform.Transform("..\Repro.xml", "..\output.xml")
Console.WriteLine("Done")
Dim response As String = Console.ReadLine
Enregistrez et exécutez le projet. Le code de la procédure Sub Main() exécute la transformation XSLT et écrit le résultat de transformation dans un fichier nommé Output.xml dans le dossier du projet. Le message "terminé" s'affiche dans la fenêtre de console lorsque la transformation se termine. Appuyez sur une touche pour fermer la fenêtre de console et revenir à l'environnement de développement.
Dans l'Explorateur de solutions, cliquez sur Actualiser le bouton pour afficher le fichier Output.xml dans le dossier du projet. Lorsque vous ouvrez le fichier Output.xml, vous verrez qu'il contient le code XML suivant :
les éléments de valeur dans la source XML dont les valeurs fonction de leur position ne figurent pas dans la sortie comme prévu. Le <position3element>élément, cependant, a la valeur correcte car l'expression qui est utilisée dans la feuille de style pour récupérer il utilise la fonction de position dans un prédicat (au lieu de directement comme un argument de fonction XSLT).
Fermez Output.xml, puis ouvrez la feuille de style Repro.xsl.
Remplacer la <xsl:for-each>bloc qui est utilisé pour générer le contenu de la <valuesthatmatchposition>élément avec le code suivant pour stocker le résultat de la position fonction XPath dans une variable XSLT et fournir la variable en tant que valeur de paramètre dans l'appel de la fonction XSLT clé :
Enregistrer les modifications à la feuille de style et puis réexécutez le projet. Lorsque vous affichez le contenu de Output.xml, vous voyez le code XML suivant :
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 324033
(http://support.microsoft.com/kb/324033/en-us/
)
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.
Envoyez-nous vos commentaires sur les informations de cette page
Ces informations vous ont-elles aidé à résoudre votre problème ?
Oui
Non
Je ne sais pas
Ces informations étaient-elles pertinentes ?
Oui
Non
Que pourrions-nous faire pour améliorer ces informations ?
Attention : Veuillez ne pas indiquer vos coordonnées personnelles (adresse email ou numéro de téléphone) dans vos commentaires ci-dessous. Ce champ de commentaires ne permet pas de joindre le support technique Microsoft. Si vous avez une demande relative à une difficulté technique,cliquez ici pour contacter le Support Technique Microsoft
Merci ! Vos commentaires sont très utiles pour l'amélioration de notre contenu d'aide et de support. Si vous avez besoin d'aide complémentaire, veuillez consulter la page d'accueil d'aide et support.