Condividi tramite


Procedura dettagliata: Eseguire il debug di un foglio di stile XSLT

Nei passaggi della procedura dettagliata viene illustrato come usare il debugger XSLT. I passaggi comprendono la visualizzazione delle variabili, l'impostazione dei punti di interruzione e l'esecuzione del codice un'istruzione alla volta. Il debugger consente di eseguire codice una riga alla volta.

Per prepararsi a questa procedura dettagliata, copiare prima i due file di esempio nel computer locale. Uno è il foglio di stile e uno è il file XML che verrà usato come input per il foglio di stile. In questa procedura dettagliata, il foglio di stile usato trova tutti i libri il cui costo è inferiore al prezzo medio del libro.

Nota

Il debugger XSLT è disponibile solo nelle edizioni Professional ed Enterprise di Visual Studio.

Consente di iniziare il debug

  1. Scegliere Apri>file dal menu File.

  2. Individuare il file below-average.xsl e scegliere Apri.

    Il foglio di stile viene aperto nell'editor XML.

  3. Fare clic sul pulsante Sfoglia (...) nel campo Input della finestra delle proprietà del documento. (Se il La finestra Proprietà non è visibile, fare clic con il pulsante destro del mouse in un punto qualsiasi del file aperto nell'editor e quindi scegliere Proprietà.

  4. Individuare il file books.xml e quindi scegliere Apri.

    In questo modo viene impostato il file di documento di origine utilizzato per la trasformazione XSLT.

  5. Impostare un punto di interruzione nella riga 12 inferiore alla media.xsl. È possibile eseguire questa operazione in uno dei diversi modi seguenti:

    • Fare clic sul margine dell'editor nella riga 12.

    • Fare clic in un punto qualsiasi della riga 12 e quindi premere F9.

    • Fare clic con il pulsante destro del mouse sul xsl:if tag start e scegliere Inserisci punto> di interruzione.

      Insert breakpoint in XSL file in Visual Studio

  6. Sulla barra dei menu scegliere XML>Start XSLT Debugging (oppure premere ALT+F5).

    Viene avviato il processo di debug.

    Nell'editor il debugger viene posizionato sull'elemento xsl:if del foglio di stile. Nell'editor viene aperto un altro file denominato below-average.xml . Si tratta del file di output che verrà popolato durante l'elaborazione di ogni nodo nel file di input books.xml .

    Le finestre Auto, Variabili locali e Espressione di controllo 1 vengono visualizzate nella parte inferiore della finestra di Visual Studio. Nella finestra Variabili locali vengono visualizzate tutte le variabili locali e i relativi valori correnti. incluse le variabili definite nel foglio di stile e quelle usate dal debugger per tenere traccia dei nodi presenti nel contesto.

Finestra di controllo

Verranno aggiunte due variabili alla finestra Espressione di controllo 1 , in modo da poter esaminare i relativi valori durante l'elaborazione del file di input. (È anche possibile usare il Finestra Variabili locali per esaminare i valori se le variabili da controllare sono già presenti.

  1. Dal menu Debug scegliere Windows>Watch>Watch 1.

    La finestra Espressione di controllo 1 diventa visibile.

  2. Digitare $bookAverage il campo Nome e quindi premere INVIO.

    Il valore della $bookAverage variabile viene visualizzato nel campo Valore .

  3. Nella riga successiva digitare self::node() nel campo Nome e quindi premere INVIO.

    self::node() è un'espressione XPath che restituisce il nodo di contesto corrente. Il valore dell'espressione XPath self::node() costituisce il primo nodo libro. Il valore verrà modificato durante le fasi della trasformazione.

  4. Espandere il self::node() nodo e quindi espandere il nodo il cui valore è price.

    Watch window during XSLT debugging in Visual Studio

    È possibile visualizzare il valore del prezzo del libro per il nodo libro corrente e confrontarlo con il $bookAverage valore . Poiché il prezzo del libro è inferiore alla media, la xsl:if condizione dovrebbe avere esito positivo quando si continua il processo di debug.

Eseguire il codice

  1. Premere F5 per continuare.

    Poiché il primo nodo libro ha soddisfatto la xsl:if condizione, il nodo libro viene aggiunto al file di output below-average.xml . Il debugger continua l'esecuzione se non viene posizionato di nuovo sull'elemento xsl:if nel foglio di stile. Il debugger è ora posizionato nel secondo nodo book nel file books.xml .

    Nella finestra Espressione di controllo 1 il self::node() valore viene modificato nel secondo nodo libro. Analizzando il valore dell'elemento prezzo, è possibile determinare che il prezzo è maggiore del prezzo medio e che pertanto la condizione xsl:if non dovrebbe essere eseguita correttamente.

  2. Premere F5 per continuare.

    Poiché il secondo nodo libro non soddisfa la xsl:if condizione, il nodo book non viene aggiunto al file di output below-average.xml . Il debugger continua a essere eseguito fino a quando non viene nuovamente posizionato sull'elemento xsl:if nel foglio di stile. Il debugger è ora posizionato sul terzo book nodo del file books.xml .

    Nella finestra Espressione di controllo 1 il self::node() valore viene modificato nel terzo nodo libro. Esaminando il valore dell'elemento price , è possibile determinare che il prezzo è inferiore alla media. La xsl:if condizione deve avere esito positivo.

  3. Premere F5 per continuare.

    Poiché la xsl:if condizione è stata soddisfatta, il terzo libro viene aggiunto al file di output below-average.xml . Tutti i libri nel documento XML sono stati elaborati e il debugger si arresta.

File di esempio

I due file seguenti vengono usati nella procedura dettagliata.

sotto la media.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>