Share via


Procédure pas à pas : Déboguer une feuille de style XSLT

Les étapes de cette procédure pas à pas montrent comment utiliser le débogueur XSLT. Elles comprennent l'affichage des variables, la définition de points d'arrêt et le parcours pas à pas du code. Le débogueur vous permet d’exécuter du code, ligne par ligne.

Pour préparer cette procédure pas à pas, copiez d’abord les deux exemples de fichiers sur votre ordinateur local. L’un correspond à la feuille de style, et l’autre au fichier XML que nous allons utiliser en tant qu’entrée de la feuille de style. Dans cette procédure pas à pas, la feuille de style que nous utilisons permet de rechercher tous les livres dont le coût est inférieur au prix moyen d’un livre.

Notes

Le débogueur XSLT est disponible uniquement dans les éditions Professional et Enterprise de Visual Studio.

Démarrer le débogage

  1. Dans le menu Fichier, choisissez Ouvrir>Fichier.

  2. Recherchez le fichier below-average.xsl, puis choisissez Ouvrir.

    La feuille de style s’ouvre dans l’éditeur XML.

  3. Cliquez sur le bouton Parcourir (...) dans le champ Entrée de la fenêtre Propriétés du document. (Si la fenêtre Propriétés n’est pas visible, cliquez avec le bouton droit n’importe où sur le fichier ouvert dans l’éditeur, puis choisissez Propriétés.)

  4. Recherchez le fichier books.xml, puis choisissez Ouvrir.

    Cela permet de définir le fichier de document source utilisé pour la transformation XSLT.

  5. Définissez un point d’arrêt à la ligne 12 de below-average.xsl. Vous pouvez effectuer cette opération de plusieurs façons :

    • Cliquez dans la marge de l’éditeur à la ligne 12.

    • Cliquez n’importe où sur la ligne 12, puis appuyez sur F9.

    • Cliquez avec le bouton droit sur la balise de début xsl:if, puis choisissez Point d’arrêt>Insérer un point d’arrêt.

      Insert breakpoint in XSL file in Visual Studio

  6. Dans la barre de menus, choisissez XML>Démarrer le débogage XSLT (ou appuyez surAlt+F5).

    Le processus de débogage démarre.

    Dans l’éditeur, le débogueur est positionné sur l’élément xsl:if de la feuille de style. Un autre fichier nommé below-average.xml s’ouvre dans l’éditeur. Il s’agit du fichier de sortie qui sera rempli au fur et à mesure du traitement de chaque nœud du fichier d’entrée books.xml.

    Les fenêtres Automatique, Variables locales et Espion 1 s’affichent au bas de la fenêtre de Visual Studio. La fenêtre Variables locales affiche toutes les variables locales et leurs valeurs actuelles. Cela comprend les variables définies dans la feuille de style ainsi que celles que le débogueur utilise pour assurer le suivi des nœuds actuellement dans le contexte.

Fenêtre Espion

Nous allons ajouter deux variables à la fenêtre Espion 1 pour pouvoir examiner leurs valeurs durant le traitement du fichier d’entrée. (Vous pouvez également utiliser la fenêtre Variables locales pour examiner les valeurs si les variables à suivre s’y trouvent déjà.)

  1. Dans le menu Débogage, choisissez Windows>Espion>Espion 1.

    La fenêtre Espion 1 devient visible.

  2. Tapez $bookAverage dans le champ Nom, puis appuyez sur Entrée.

    La valeur de la variable $bookAverage s’affiche dans le champ Valeur.

  3. Sur la ligne suivante, tapez self::node() dans le champ Nom, puis appuyez sur Entrée.

    self::node() est une expression XPath dont l’évaluation correspond au nœud de contexte actuel. La valeur de l'expression XPath self::node() est le premier nœud book. Cette valeur change à mesure que la transformation progresse.

  4. Développez le nœud self::node(), puis développez le nœud dont la valeur est price.

    Watch window during XSLT debugging in Visual Studio

    Vous pouvez voir la valeur du prix du livre pour le nœud book actuel, et la comparer à la valeur $bookAverage. Dans la mesure où le prix du livre est inférieur à la moyenne, la condition xsl:if doit être satisfaite quand vous poursuivez le processus de débogage.

Parcours du code pas à pas

  1. Appuyez sur F5 pour continuer.

    Dans la mesure où le premier nœud book répond à la condition xsl:if, il est ajouté au fichier de sortie below-average.xml. Le débogueur continue l'exécution jusqu'à ce qu'il se repositionne sur l'élément xsl:if de la feuille de style. Le débogueur est désormais placé sur le deuxième nœud book dans le fichier books.xml.

    Dans la fenêtre Espion 1, la valeur self::node() devient le deuxième nœud book. En examinant la valeur de l'élément price, vous pouvez constater que le prix est supérieur à la moyenne, donc la condition xsl:if ne doit pas se vérifier.

  2. Appuyez sur F5 pour continuer.

    Dans la mesure où le deuxième nœud book ne répond pas à la condition xsl:if, il n’est pas ajouté au fichier de sortie below-average.xml. Le débogueur continue de s’exécuter jusqu’à ce qu’il soit à nouveau positionné sur l’élément xsl:if de la feuille de style. Le débogueur est désormais placé sur le troisième nœud book dans le fichier books.xml.

    Dans la fenêtre Espion 1, la valeur self::node() devient le troisième nœud book. En examinant la valeur de l’élément price, vous pouvez déterminer si le prix est inférieur à la moyenne. La condition xsl:if doit être remplie.

  3. Appuyez sur F5 pour continuer.

    Dans la mesure où la condition xsl:if est remplie, le troisième livre est ajouté au fichier de sortie below-average.xml. Tous les livres du document XML ont été traités et le débogueur s'arrête.

Exemple de fichiers

La procédure pas à pas utilise les deux fichiers suivants.

below-average.xsl

<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" encoding="utf-8"/>
  <xsl:template match="/">
    <xsl:variable name="bookCount" select="count(/bookstore/book)"/>
    <xsl:variable name="bookTotal" select="sum(/bookstore/book/price)"/>
    <xsl:variable name="bookAverage" select="$bookTotal div $bookCount"/>
    <books>
      <!--Books That Cost Below Average-->
      <xsl:for-each select="/bookstore/book">
        <xsl:if test="price &lt; $bookAverage">
          <xsl:copy-of select="."/>
        </xsl:if>
      </xsl:for-each>
    </books>
  </xsl:template>
</xsl:stylesheet>

books.xml

<?xml version='1.0'?>
<!-- This file represents a fragment of a book store inventory database -->
<bookstore>
  <book genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0">
    <title>The Autobiography of Benjamin Franklin</title>
    <author>
      <first-name>Benjamin</first-name>
      <last-name>Franklin</last-name>
    </author>
    <price>8.99</price>
  </book>
  <book genre="novel" publicationdate="1967" ISBN="0-201-63361-2">
    <title>The Confidence Man</title>
    <author>
      <first-name>Herman</first-name>
      <last-name>Melville</last-name>
    </author>
    <price>11.99</price>
  </book>
  <book genre="philosophy" publicationdate="1991" ISBN="1-861001-57-6">
    <title>The Gorgias</title>
    <author>
      <name>Plato</name>
    </author>
    <price>9.99</price>
  </book>
</bookstore>