Passo a passo: Depurar uma folha de estilos XSLTWalkthrough: Debug an XSLT style sheet

As etapas nessa explicação passo a passo demonstra como usar o depurador XSLT.The steps in this walkthrough demonstrate how to use the XSLT debugger. As etapas incluem variáveis de exibição, pontos de interrupção, e percorrendo o código.Steps include viewing variables, setting breakpoints, and stepping through the code. A folha de estilos localiza os livros que custam abaixo do preço médio de livro.The style sheet finds all books that cost below the average book price.

Para preparar-se para esse passo a passoTo prepare for this walkthrough

  1. Feche soluções abertas.Close any open solutions.

  2. Copie os dois arquivos de exemplo para seu computador local.Copy the two sample files to your local computer.

Iniciar a depuraçãoStart debugging

Para iniciar a depuraçãoTo start debugging

  1. Do arquivo , aponte para abrire clique em arquivo.From the File menu, point to Open, and click File.

  2. Localize o belowAvg.xsl de arquivo e clique em abrir.Locate the belowAvg.xsl file and click Open.

    A folha de estilos é aberta no editor XML.The style sheet is opened in the XML Editor.

  3. Clique no botão Procurar (... ) sobre o entrada campo da janela de propriedades do documento.Click the browse button (...) on the Input field of the document properties window.

  4. Localize o books.xml de arquivo e clique em abrir.Locate the books.xml file and click Open.

    Isso define o arquivo de documento de origem que é usado para a transformação XSLT.This sets the source document file that is used for the XSLT transformation.

  5. Clique com botão direito do xsl:if marca de início, aponte para ponto de interrupçãoe clique em Inserir ponto de interrupção.Right-click the xsl:if start tag, point to Breakpoint, and click Insert Breakpoint.

  6. Clique o depurar XSL na barra de ferramentas do Editor de XML.Click the Debug XSL button on the XML Editor toolbar.

Isso inicia o processo de depuração e abre várias o windows que são usadas pelo depurador.This starts the debugging process and opens several new windows that are used by the debugger.

Há duas janelas que exibem o documento de entrada e estilos sobrepor.There are two windows that display the input document and styles sheet. O depurador usar essas janelas para mostrar o estado atual de execução.The debugger uses these windows to show the current execution state. O depurador está posicionado no xsl:if elemento da folha de estilos e no primeiro nó de catálogo no books.xml arquivo.The debugger is positioned on the xsl:if element of the style sheet and on the first book node in the books.xml file.

O locais janela exibe todas as variáveis locais e seus valores atuais.The Locals window displays all the local variables and their current values. Isso inclui variáveis definidos na folha de estilos e também variáveis que o depurador usa para controlar os nós que estão atualmente no contexto.This includes variables defined in the style sheet and also variables that the debugger uses to track the nodes that are currently in context.

O saída XSL janela exibe a saída da transformação XSL.The XSL Output window displays the output of the XSL transformation. Esta janela é separada do saída do Visual Studio janela.This window is separate from the Visual Studio Output window.

Janela InspecionarWatch window

Para usar a janela de observaçãoTo use the Watch window

  1. Do depurar , aponte para Windows, aponte para inspecionare clique em inspecionar 1.From the Debug menu, point to Windows, point to Watch, and click Watch 1.

    Isso torna o inspecionar 1 visível da janela.This makes the Watch 1 window visible.

  2. Tipo $bookAverage no nome campo e pressione Enter.Type $bookAverage in the Name field and press Enter.

    O valor da variável de $bookAverage é exibido na janela.The value of the $bookAverage variable is displayed in the window.

  3. Tipo self::node() no nome campo e pressione Enter.Type self::node() in the Name field and press Enter.

    self::node() é uma expressão XPath que avalia ao nó atual de contexto.self::node() is an XPath expression that evaluates to the current context node. O valor da expressão XPath de self::node() é o primeiro nó de livro.The value of the self::node() XPath expression is the first book node. Isso é alterado como nós progredimos com a transformação.This changes as we progress through the transformation.

  4. Expanda o nó de self::node() em seguida, expanda o nó de price .Expand the self::node() node, and then expand the price node.

    Isso permite que você possa ver o valor do custo do livro e você pode facilmente compará-lo ao valor de $bookAverage .This allows you to see the value of the book price and you can easily compare it to the $bookAverage value. Porque o custo de livro abaixo de média, a condição de xsl:if deve obterá êxito.Because the book price is below the average, the xsl:if condition should succeed.

Percorrer o códigoStep through the code

O depurador permite que você execute a linha de código por vez.The debugger enables you to execute code one line at a time.

Para depurar códigoTo step through the code

  1. Pressione F5 para continuar.Press F5 to continue.

    Porque o primeiro nó de catálogo satisfeita o xsl:if condição, o nó de catálogo é adicionado para o saída XSL janela.Because the first book node satisfied the xsl:if condition, the book node is added to the XSL Output window. O depurador continuará a ser executado até que está localizado novamente no elemento de xsl:if na folha de estilos.The debugger continues to execute until it is positioned again on the xsl:if element in the style sheet. O depurador agora é posicionado no segundo nó Catálogo de books.xml arquivo.The debugger is now positioned on the second book node in the books.xml file.

    No inspecionar 1 janela o self::node() valor é alterado para o segundo nó de catálogo.In the Watch 1 window the self::node() value changes to the second book node. Examinando o valor do elemento de preço, você pode determinar que o preço está acima da média, então a condição de xsl:if deve falhar.By examining the value of the price element, you can determine that the price is above the average, thus the xsl:if condition should fail.

  2. Pressione F5 para continuar.Press F5 to continue.

    Porque o segundo nó de catálogo não atende a xsl:if condição, o nó de catálogo não é adicionado ao saída XSL janela.Because the second book node does not meet the xsl:if condition, the book node is not added to the XSL Output window. O depurador continuará a ser executado até que está localizado novamente no elemento de xsl:if na folha de estilos.The debugger continues to execute until it is positioned again on the xsl:if element in the style sheet. Agora, o depurador é posicionado na terceira book nó o books.xml arquivo.The debugger is now positioned on the third book node in the books.xml file.

    No inspecionar 1 janela o self::node() valor é alterado para o terceiro nó de catálogo.In the Watch 1 window the self::node() value changes to the third book node. Examinando o valor do elemento de price , você pode determinar que o preço abaixo de média, então a condição de xsl:if deve obterá êxito.By examining the value of the price element, you can determine that the price is below the average, thus the xsl:if condition should succeed.

  3. Pressione F5 para continuar.Press F5 to continue.

    Porque o xsl:if condição foi atendida, o catálogo de terceiro é adicionado para o saída XSL janela.Because the xsl:if condition was satisfied, the third book is added to the XSL Output window. Todos os livros no documento XML foram processados e paradas do depurador.All books in the XML document have been processed and the debugger stops.

Arquivos de exemploSample files

Os seguintes dois arquivos são usados por passo a passo.The following two files are used by the walkthrough.

belowAvg.xslbelowAvg.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 < $bookAverage">
          <xsl:copy-of select="."/>
        </xsl:if>
      </xsl:for-each>
    </books>
  </xsl:template>
</xsl:stylesheet>

books.xmlbooks.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>

Consulte tambémSee also