Udostępnij za pośrednictwem


Przewodnik: debugowanie arkusza stylów XSLT

Kroki opisane w tym przewodniku pokazują, jak używać debugera XSLT. Kroki obejmują wyświetlanie zmiennych, ustawianie punktów przerwania i przechodzenie przez kod. Debuger umożliwia wykonywanie kodu po jednym wierszu naraz.

Aby przygotować się do tego przewodnika, najpierw skopiuj dwa przykładowe pliki na komputer lokalny. Jednym z nich jest arkusz stylów, a drugi to plik XML, którego będziemy używać jako danych wejściowych w arkuszu stylów. W tym przewodniku używany arkusz stylów znajduje wszystkie książki, których koszt jest niższy od średniej ceny książki.

Uwaga

Debuger XSLT jest dostępny tylko w wersjach Professional i Enterprise programu Visual Studio.

Rozpocznij debugowanie

  1. W menu Plik wybierz pozycję Otwórz>plik.

  2. Znajdź poniższy plik average.xsl i wybierz pozycję Otwórz.

    Arkusz stylów zostanie otwarty w edytorze XML.

  3. Kliknij przycisk przeglądania (...) w polu Dane wejściowe okna właściwości dokumentu. (Jeśli Okno właściwości nie jest widoczne, kliknij prawym przyciskiem myszy w dowolnym miejscu otwartego pliku w edytorze, a następnie wybierz polecenie Właściwości.

  4. Znajdź plik books.xml, a następnie wybierz pozycję Otwórz.

    Spowoduje to ustawienie pliku dokumentu źródłowego używanego do przekształcenia XSLT.

  5. Ustaw punkt przerwania w wierszu 12 poniżej średniej.xsl. Można to zrobić na jeden z wielu sposobów:

    • Kliknij margines edytora w wierszu 12.

    • Kliknij dowolne miejsce w wierszu 12, a następnie naciśnij klawisz F9.

    • Kliknij prawym przyciskiem myszy tag startowyxsl:if, a następnie wybierz pozycję Punkt przerwania Wstaw punkt przerwania>.

      Insert breakpoint in XSL file in Visual Studio

  6. Na pasku menu wybierz pozycję XML>Start XSLT Debugowanie (lub naciśnij klawisze Alt+F5).

    Rozpoczyna się proces debugowania.

    W edytorze debuger jest umieszczony na xsl:if elemecie arkusza stylów. W edytorze zostanie otwarty inny plik o nazwie below-average.xml . Jest to plik wyjściowy, który zostanie wypełniony podczas przetwarzania każdego węzła w plikach wejściowych books.xml .

    Okna Autos, Locals i Watch 1 są wyświetlane w dolnej części okna programu Visual Studio. W oknie Ustawienia lokalne są wyświetlane wszystkie zmienne lokalne i ich bieżące wartości. Obejmuje to zmienne zdefiniowane w arkuszu stylów, a także zmienne używane przez debuger do śledzenia węzłów, które są obecnie w kontekście.

okno czujki

Dodamy dwie zmienne do okna Watch 1 , aby umożliwić sprawdzenie ich wartości podczas przetwarzania pliku wejściowego. (Możesz również użyć Okno Ustawień lokalnych, aby sprawdzić wartości, jeśli zmienne, które chcesz obserwować, są już tam.

  1. W menu Debuguj wybierz pozycję Windows>Watch Watch>1.

    Okno Watch 1 staje się widoczne.

  2. Wpisz $bookAverage w polu Nazwa , a następnie naciśnij klawisz Enter.

    Wartość zmiennej $bookAverage jest wyświetlana w polu Wartość .

  3. W następnym wierszu wpisz self::node()w polu Nazwa , a następnie naciśnij klawisz Enter.

    self::node() to wyrażenie XPath, które oblicza bieżący węzeł kontekstu. Wartość self::node() wyrażenia XPath jest pierwszym węzłem książki. To zmienia się w miarę postępu transformacji.

  4. self::node() Rozwiń węzeł, a następnie rozwiń węzeł, który ma pricewartość .

    Watch window during XSLT debugging in Visual Studio

    Możesz zobaczyć wartość ceny książki dla bieżącego węzła książki i porównać ją z wartością $bookAverage . Ponieważ cena książki jest niższa od średniej, xsl:if warunek powinien zakończyć się powodzeniem po kontynuowaniu procesu debugowania.

Przechodzenie przez kod

  1. Naciśnij klawisz F5, aby kontynuować.

    Ponieważ pierwszy węzeł książki spełnia xsl:if warunek, węzeł książki jest dodawany do pliku wyjściowego below-average.xml . Debuger kontynuuje wykonywanie, dopóki nie zostanie ponownie umieszczony na xsl:if elemecie w arkuszu stylów. Debuger jest teraz umieszczony w drugim węźle książki w pliku books.xml .

    W oknie self::node() Watch 1 wartość zmienia się na drugi węzeł książki. Sprawdzając wartość elementu price, można określić, że cena jest wyższa od średniej, w związku z xsl:if czym warunek powinien zakończyć się niepowodzeniem.

  2. Naciśnij klawisz F5, aby kontynuować.

    Ponieważ drugi węzeł książki nie spełnia xsl:if warunku, węzeł książki nie jest dodawany do pliku wyjściowego below-average.xml . Debuger kontynuuje wykonywanie, dopóki nie zostanie ponownie umieszczony na xsl:if elemecie w arkuszu stylów. Debuger jest teraz umieszczony w trzecim book węźle w pliku books.xml .

    W oknie self::node() Watch 1 wartość zmienia się na trzeci węzeł książki. Sprawdzając wartość price elementu, można określić, że cena jest poniżej średniej. Warunek powinien zakończyć się powodzeniem xsl:if .

  3. Naciśnij klawisz F5, aby kontynuować.

    xsl:if Ponieważ warunek został spełniony, trzecia książka jest dodawana do pliku wyjściowego below-average.xml. Wszystkie książki w dokumencie XML zostały przetworzone i debuger zatrzymuje się.

Przykładowe pliki

Poniższe dwa pliki są używane przez przewodnik.

poniżej średniej.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>