Поделиться через


Пошаговое руководство. Отладка таблицы стилей XSLT

Шаги в данном пошаговом руководстве демонстрируют, как использовать XSLT-отладчик. Шаги включают просмотр переменных, задание точек останова и пошаговое прохождение кода. Отладчик позволяет выполнять код по одной строке за раз.

Чтобы подготовиться к изучению этого пошагового руководства, сначала скопируйте два файла примеров на локальный компьютер. Один из них — это таблица стилей, а другой — XML-файл, который будет использоваться в качестве входных данных для таблицы стилей. В этом пошаговом руководстве таблица стилей, которую мы используем, находит все книги, стоимость которых ниже средней стоимости книги.

Примечание.

Отладчик XSLT доступен только в выпусках Visual Studio Professional и Enterprise.

Запуск отладки

  1. В меню Файл выберите Открыть>Файл.

  2. Перейдите к файлу below-average.xsl и выберите Открыть.

    Таблица стилей откроется в XML-редакторе.

  3. Нажмите кнопку обзора (...) в поле Ввод окна свойств документа. (Если окно Свойства не отображается, щелкните правой кнопкой мыши в любом месте открытого файла в редакторе и выберите Свойства.)

  4. Найдите файл books.xml и нажмите кнопку Открыть.

    Таким образом задается файл исходного документа, используемого в XSLT-преобразовании.

  5. Задайте точку останова в строке 12 файла below-average.xsl. Это можно сделать несколькими способами:

    • Щелкните поле редактора в строке 12.

    • Щелкните в любом месте строки 12, а затем нажмите клавишу F9.

    • Щелкните правой кнопкой мыши открывающий тег xsl:if и выберите Точка останова>Вставить точку останова.

      Insert breakpoint in XSL file in Visual Studio

  6. В строке меню выберите XML>Запустить XSLT без отладки (или нажмите клавиши ALT+F5).

    Запустится процесс отладки.

    Позиция отладчика в редакторе будет находиться на элементе xsl:if таблицы. В редакторе откроется другой файл с именем below-average.xml. Это выходной файл, который будет заполняться по мере обработки каждого узла во входном файле books.xml.

    В нижней части окна Visual Studio отображаются окна Видимые, Локальные и Контрольное значение 1. В окне Локальные отображаются все локальные переменные и их текущие значения. Сюда относятся переменные, определенные в таблице стиля, а также переменные, используемые отладчиком для отслеживания узлов, которые в настоящий момент находятся в контексте.

Окно наблюдения

Мы добавим две переменные в окно Контрольное значение 1, чтобы можно было проверить их значения по мере обработки входного файла. (Можно также использовать окно Локальные для просмотра значений, если нужные переменные уже есть.)

  1. В меню Отладка выберите Окна>Контрольные значения>Контрольное значение 1.

    Окно Контрольное значение 1 станет видимым.

  2. Введите $bookAverage в поле Имя и нажмите клавишу ВВОД.

    В поле Значение отобразится значение переменной $bookAverage.

  3. В следующей строке введите self::node() в поле Имя и нажмите клавишу ВВОД.

    self::node() является выражением XPath, которое вычисляется до текущего узла контекста. Значение self::node() выражения XPath является первым узлом книги. Оно меняется по мере прохождения преобразования.

  4. Разверните узел self::node(), а затем разверните узел, значение которого равно price.

    Watch window during XSLT debugging in Visual Studio

    Отобразится значение цены книги для текущего узла книги, и его можно легко сравнить со значением $bookAverage. Так как цена книги ниже средней, при продолжении процесса отладки условие xsl:if должно выполняться.

Пошаговое прохождение кода

  1. Нажмите клавишу F5, чтобы продолжить.

    Так как первый узел книги удовлетворяет условию xsl:if, узел книги добавляется в выходной файл below-average.xml. Отладчик продолжает выполнение, пока не будет вновь достигнут элемент xsl:if в таблице стилей. Теперь отладчик располагается на втором узле книги в файле books.xml.

    В окне Контрольное значение 1 значение self::node() меняется на второй узел книги. Проверив значение элемента цены, можно определить, что цена выше средней; таким образом, условие xsl:if не выполняется.

  2. Нажмите клавишу F5, чтобы продолжить.

    Так как второй узел книги не удовлетворяет условию xsl:if, узел книги не добавляется в выходной файл below-average.xml. Отладчик продолжает выполнение, пока не будет вновь достигнут элемент xsl:if в таблице стилей. Теперь отладчик располагается на третьем узле book в файле books.xml.

    В окне Контрольное значение 1 значение self::node() меняется на третий узел книги. Проверив значение элемента price, можно определить, что цена ниже средней. Таким образом, условие xsl:if должно выполняться.

  3. Нажмите клавишу F5, чтобы продолжить.

    Так как условие xsl:if выполняется, третья книга добавляется в выходной файл below-average.xml. Все книги в XML-документе обработаны, отладчик прекращает выполнение.

Образцы файлов

В этом пошаговом руководстве используются следующие два файла.

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>