Отладка xslt visual studio
XML используется повсюду от веб-служб, баз данных, конфигурационных файлов, до офисных документов. Эта статья познакомит вас с инструментальной поддержкой предлагаемой Visual Studio 2008, которая облегчает работу с XML. В статье рассматривается редактирование XML файлов, работа со схемами XML, отладка стилевых таблиц XSLT и расширение Visual Studio при помощи написания собственных XML дизайнеров.
Когда вы открываете XML файл в Visual Studio 2008 (например .xml, .xsd, .xslt, .svg или .config), вы запускаете встроенный редактор XML. XML редактор поставляется с полным набором функций который можно ожидать от редактора Visual Studio, включая IntelliSense, раскраску кода, подсветку скобок, сворачивание/разворачиваине и форматирование кода. Он предоставляет полную проверку синтаксиса XML 1.0, завершение тэгов, также как и поддержку схемы XML с валидацией в реальном времени.
Редактирование XML файлов
Нужно признать, что ручное редактирование XML-файлов может быть очень утомительным и отнимать много времени. Чтобы помочь в этом XML редактор Visual Studio 2008 поставляется с большим количеством функций для улучшения производительности. Одной из таких функций является расширяемая библиотека фрагментов XML кода — XML файлов которые содержат конфигурируемые участки кода, которые выступают в роли шаблонов для использования во время редактирования документа. С Visual Studio устанавливается много файлов фрагментов XML кода, которые помогают разработчикам при написании схем XML и стилевых страниц XSLT. Чтобы вызвать фрагмент во время редактирования XML-файла, выберите «Insert Snippet» («Вставить Фрагмент») из меню «Edit > IntelliSense» («Редактировать > IntelliSense»). Как только вы вставили фрагмент, вы можете перемещаться между подсвеченными полями, которые можно изменять клавишей TAB, чтобы вводить данные. На Рисунке 1 показан пример вставки фрагмента.
Рисунок 1: Вызов фрагмента XML кода в Visual Studio 2008.
Вы также можете записывать ваши собственные фрагменты. Если вы хотите создать простой фрагмент, выполните следующие шаги:
Создайте XML файл и наберите в нем:
<snippet
Нажмите ESCAPE, чтобы закрыть окно IntelliSense.
Нажмите TAB.
Введите значение.
Нажмите ENTER для завершения.
Для более подробной информации Я рекомендую публикацию в блоге редактор Visual Studio
«Code Snippet — Schema Description».
Что вы будете делать, когда нету готовых фрагментов XML кода, а вам нужно создать XML файл основанный на существующей схеме? Редактор XML предлагает широкий диапазон возможностей при помощи которых вы можете ассоциировать ваши XML документы с XML схемами. IntelliSense основанные на схеме, валидацию в режиме реально времени, а также отчет об ошибках это всего несколько из них. В дополнение к названному, XML редактор может динамически генерировать фрагменты кода основанные на существующей схеме. После того как вы предоставили имя элемента который нужно добавить XML редактор может проанализировать схему на требующуюся информацию, сгенерировать фрагмент кода и вставить его для вас. Чтобы вызвать функции динамического построения фрагментов XML кода все что вам нужно сделать, набрать имя элемента также как это показано в следующем примере:
и нажмите клавишу TAB. XML редактор создаст фрагмент кода, который будет выглядеть очень похоже с тем, что уже было показано на Рисунке 1 за исключением того, что вам ничего не нужно будет делать заранее. Это очень мощная функция, особенно, когда вам нужно создать документы с большими моделями содержимого.
По умолчанию XML редактор генерирует только требующееся содержимое, но это поведение может быть переопределено при помощи аннотаций в XML схемах. Больше информации вы найдете в MSDN под заголовком, «How to: Generate an XML Snippet From an XML Schema».
Кеш схемы и каталоги Схем
Для продвинутых пользователей XML редактор предлагает такие функций как кеш схемы каталоги файлов схем. Кеш схемы это папка которая содержит множество хорошо известных W3C схем, также как и много схем конкретно созданных Microsoft или связанных с их технологиями. Она служит как репозиторий широко используемых схем, которые обычно не меняются. Вы найдете расположение схем по умолчанию в %vsinstalldir%\xml\schemas, где "%vsinstalldir%" это переменная представляющая расположение в которое установлена Visual Studio. Когда вы объявляете одно из пространств имен определенных этими схемами в ваших XML файлах, редактор будет автоматически ассоциировать соответствующие схемы из расположения кеша и быстро предоставлять IntelliSense и валидацию для этой схемы.
Каталог схем это XML файлы размещающиеся в директории кеша схем (файл catalog.xml по умолчанию). Они дают продвинутым пользователям более точный контроль над различными пространствами имен, которые они возможно будут использовать. Например, вы можете ассоциировать определенные пространства имен с внешними источниками:
<Schema
href="mylocation/myschema.xsd"
targetNamespace="http://myschema"/>
Вы также можете использовать файлы каталогов для создания ассоциаций между файлами схемы и расширениями файлов вам может быть это иногда полезно, когда схема не имеет targetNamespace:
<Association
extension="config"
schema="xml/schemas/dotNetConfig.xsd"/>
Нововведение в Visual Studio 2008, вы также можете добавлять условия:
<Association
extension="config"
schema="xml/schemas/dotNetConfig30.xsd"
condition="%TargetFrameworkVersion% = 3.0" />
Наконец, вы можете создать цепочку ссылаясь из одного файла каталога на другой:
Работа с большими файлами
Другая важная функция редактирования которую я хотел бы отметить это поддержка редактором XML больших файлов. Хотя вы и могли работать с большими файлами в предыдущих версиях, Visual Studio 2008 поддерживает инкрементальный анализ XML документов. Теперь, если вы работаете с файлом размером 10 Мб, вам не нужно ждать пока Visual Studio проанализирует файл целиком каждый раз как вы внесли изменения. XML редактор изолирует правки и переанализирует только те части которые требуется, предлагая таким образом лучшую производительность и отклик.
Я описал лишь несколько интересных функций XML редактора, но очевидно, нельзя рассмотреть здесь все из них. Таблица 1 показывает некоторые из функций которые доступны пользователям Visual Studio.
Функция | Поддержка в Visual Studio 2008 |
Автозавершение | X |
Подсветка синтаксиса | X |
Сворачивание/Разворачивание кода | X |
IntelliSense | X |
Расширяемая библиотека фрагментов кода | X |
Динамические фрагменты кода | X |
Переход к определению (из XML к XSD) | X |
Навигация назад/вперед | X |
Поддержка проекта и профиля пользователя | X |
Валидация в режиме реального времени | X |
Полная поддержка XSD | X |
Поддержка пространств имен | X |
Поддержка DTD | X |
Генерация XSD по XML | X |
Конвертация DTD в XSD | X |
Поддержка Юникода | X |
Поддержка больших файлов (10 Мб+) | X |
Отладка стилевых таблиц XSLT
XSLT является стандартным языком трансформаций утвержденным W3C, который очень популярен среди большой группы разработчиков. Редакция Visual Studio Professional предоставляет поддержку редактирования и отладки стилевых таблиц XSLT. Редактирование файлов XSLT подобно редактированию XML файлов. Когда речь заходит об отладке XSLT, Visual Studio поддерживает два главных сценария:
Отладка отдельной трансформации, которая полезна, когда вашим изначальным интересом является документ на входе, собственно трансформация и документ на выходе.
Интегрированная в CLR отладка, которая полезна для отладки трансформаций в контексте вашего CLR приложения.
Отладка отдельных трансформаций
Рисунок 2 демонстрирует среду отладки, в момент когда вы работаете с XSLT трансформациями. В конфигурации по умолчанию, вы можете видеть XSLT файл и вкладки видов ввода документа и вывода документа. Вы также можете сконфигурировать Visual Studio, чтобы одновременно отображались все три документа. Когда вы проходите через код трансформации, вы можете видеть входящие данные, трансформацию которая обрабатывает этот ввод и генерацию выходного файла.
Рисунок 2: Отладка отдельных XSLT трансформаций.
CLR-интегрированная отладка
XslCompiledTransform xsltcmd =
new XslCompiledTransform( true );
xsltcmd.Load(XSLTFile);
XmlUrlResolver resolver = new XmlUrlResolver();
XmlWriter writer = XmlWriter.Create(OutputFile);
* This source code was highlighted with Source Code Highlighter .
Если вы установите точку останова на вызове метода и пройдете в него, отладчик покажет вам стилевую таблицу XSLT (Рисунок 3). Все функции описанные в разделе отладки отдельной таблицы стилей также применимы здесь. Единственным исключением является возможность устанавливать точки останова в файлах данных. Эта функция не доступна, когда вы переходите из в XSLT из другой программы на CLR. Все остальное будет вести себя точно также как описано в выше.
Таблица 2 представляет сводку различных функций доступных во время отладки XSLT трансформаций.
Feature | Visual Studio 2008 Support |
Browser view | X |
Locals, watch, call stack | X |
Viewing input XML, output, and XLST during debugging | X |
Breakpoints in XML | X |
Breakpoints in XSLT | X |
CLR language debugger integration | X |
Расширение инструментов XML
Рисунок 4: Старый способ создания пользовательских XML дизайнеров поверх XML редактора.
С другой стороны в XML редакторе есть свой собственный анализатор с восстановлением после ошибок. Она также создает свое собственное дерево анализа представляющее содержимое буфера. В Visual Studio 2008, Microsoft открыла это дерево LINQ to XML сторонним разработчикам. Новая архитектура показана на Рисунке 5. Новое API позволяет разработчикам создавать пользовательские виды поверх дерева анализа XML редактора, предоставляющие им логику восстановления после ошибок XML редактора и дерево анализа LINQ to XML с транзакциями по обновлению, результаты выполнения которых появляются в буфере интегрированным Visual Studio UndoManager. Эти изменения облегчают разработчикам создание XML инструментов поверх Visual Studio 2008.
В Visual Studio можно выполнять отладку кода XSLT. Отладчик XSLT поддерживает задание точек останова, просмотр состояний выполнения XSLT и т. д. Его можно использовать для отладки таблицы стилей XSLT или приложений XSLT.
Код можно выполнять по одной строке, делая шаг с входом, шаг с пропуском или шаг с выходом. Команды для использования возможностей пошагового прохождения кода аналогичны в отладчике XSLT и в других отладчиках Visual Studio.
При запуске отладки отладчик XSLT открывает окна, в которых отображается входной документ и выход XSLT.
Отладчик XSLT доступен только в выпусках Visual Studio Professional и Enterprise.
Отладка из редактора XML
Отладчик можно запустить при наличии таблицы стилей или входного XML-файла, открытого в редакторе. Это позволяет выполнять отладку по мере создания таблицы стилей.
Откройте таблицу стилей или XML-файл в Visual Studio.
Выберите Начать отладку XSLT из меню XML или нажмите клавиши ALT+F5.
Отладка из приложения, использующего XSLT
При отладке приложения можно сделать шаг с входом в код XSLT. Если нажать клавишу F11 при вызове System.Xml.Xsl.XslCompiledTransform.Transform, отладчик может войти в код XSLT.
Выполнение шага со входом в код XSLT из класса XslTransform не поддерживается. Класс XslCompiledTransform является единственным обработчиком XSLT, поддерживающим вход в код XSLT при отладке.
Начало отладки приложения XSLT
При создании объекта XslCompiledTransform устанавливайте в своем коде параметр enableDebug в значение true . Это заставляет обработчик XSLT создавать отладочные данные при компиляции кода.
Нажмите клавишу F11, чтобы войти в код XSLT.
Таблица стилей XSLT загружается в новое окно документа и запускается XSLT-отладчик.
Можно также добавить точку останова в таблицу стилей и запустить приложение.
Пример
Профилировщик XSLT
Профилировщик XSLT — это средство, которое позволяет разработчикам измерять, оценивать и устранять в XSLT-коде проблемы, связанные с производительностью, посредством создания подробных отчетов о производительности XSLT. Дополнительные сведения см. в статье о профилировщике XSLT.
В этом разделе описываются разные окна отладчика, в том числе диалоговые окна. Здесь рассматриваются только те элементы пользовательского интерфейса, которым свойственно характерное для XSLT поведение при отладке.
Локальные - окно
Окно локальных значений отображает сведения обо всех переменных, определенных в таблице стилей. Окно локальных значений содержит три столбца сведений.
Name
В этом столбце содержатся имена всех локальных переменных текущей области. Наборы узлов имеют иерархическое представление, в котором можно переходить на более низкие уровни, чтобы увидеть вложенные папки.
Значение
Этот столбец показывает значение, содержащееся в каждой переменной. Узлы атрибутов, инструкций по обработке, комментариев, текста и CDATA отображают текстовое значение узла. Узлы пространства имен отображают URI-код пространства имен.
Type
В этом столбце содержатся типы данных для каждой переменной из столбца Имя.
Окно локальных значений также отображает стандартные переменные контекста, которые отслеживают контекст XSLT-преобразования. Следующая таблица описывает стандартные переменные контекста, используемые XSLT-отладчиком.
name | Описание |
---|---|
last() | Размер контекста. |
position() | Положение или индексное число узла контекста относительно размера контекста. |
self::node() | Значение узла контекста. |
окно выходных данных
список задач
В списке задач приводятся все ошибки компиляции в таблице стилей. Двойной щелчок ошибки перемещает курсор к строке с ошибкой.
В список задач включаются все ошибки, которые возникают в блоках скрипта в файле XSLT.
В отладчике XSLT предупреждения не предусмотрены, поэтому они никогда не появляются в списке задач.
Точки останова - окно
Окно точек останова показывает все точки останова, заданные в текущем проекте. Если точка останова добавляется, пока окно просматривается, окно автоматически обновляется, чтобы отображать новую точку останова.
Окно точек останова должно вести себя таким же образом, что и другие отладчики среды Visual Studio.
Контрольные значения - окно
Окно просмотра значений используется для вычисления переменных. Можно также изменить значения переменных.
Переменные, отображаемые в окне просмотра значений, относятся к текущему контексту (самый верхний элемент в стеке вызовов). Если изменить контекст, окно просмотра значений обновляет и отображает переменные, заданные для этого контекста.
Стек вызовов - окно
Окно стека вызовов используется для просмотра имен функций в стеке вызовов, типов параметров и значений параметров. Сведения стека вызовов отображаются, только если отлаживаемая программа находится в состоянии останова.
Стек вызовов представляет различные контексты, через которые проходит выполнение XSLT. Например, если шаблон "а" вызывает шаблон "б", то шаблон "а" и шаблон "б" появляются в окне стека вызовов с текущим контекстом в самом верху списка. Пользователь может видеть запрос, который выполняется в текущий момент.
Если у шаблона отсутствует имя в XSLT-файле, то используются имена, формируемые XSLT-обработчиком.
Щелкнув элемент, отличный от находящегося вверху списка, пользователь может узнать, где находится ветвь выполнения, с помощью стандартного зеленого выделения и зеленых стрелок.
Контрольное значение - диалоговое окно
Диалоговое окно QuickWatch используется для вычисления выражений XPath 1.0. Узел контекста (узел self::node() в окне локальных значений) предоставляет контекст для выполнения выражения XPath. Результат выполнения выражения XPath отображается в окне просмотра значений.
В следующем списке приводятся некоторые ограничения для вычисления выражений XPath.
Разрешаются только встроенные функции XPath.
Встроенные функции XSLT, такие как document() и key() , не допускаются.
Определяемые пользователем функции не допускаются.
Дизассемблирование - окно
Окно дизассемблирования показывает код сборки, формируемый XSLT-компилятором. Это окно можно использовать так же, как и все остальные окна дизассемблирования среды Visual Studio.
Шаги в данном пошаговом руководстве демонстрируют, как использовать XSLT-отладчик. Шаги включают просмотр переменных, задание точек останова и пошаговое прохождение кода. Отладчик позволяет выполнять код по одной строке за раз.
Чтобы подготовиться к изучению этого пошагового руководства, сначала скопируйте два файла примеров на локальный компьютер. Один из них — это таблица стилей, а другой — XML-файл, который будет использоваться в качестве входных данных для таблицы стилей. В этом пошаговом руководстве таблица стилей, которую мы используем, находит все книги, стоимость которых ниже средней стоимости книги.
Отладчик XSLT доступен только в выпусках Visual Studio Professional и Enterprise.
Начать отладку
В меню Файл выберите Открыть > Файл.
Перейдите к файлу below-average.xsl и выберите Открыть.
Таблица стилей откроется в XML-редакторе.
Найдите файл books.xml и нажмите кнопку Открыть.
Таким образом задается файл исходного документа, используемого в XSLT-преобразовании.
Задайте точку останова в строке 12 файла below-average.xsl. Это можно сделать несколькими способами:
Щелкните поле редактора в строке 12.
Щелкните в любом месте строки 12, а затем нажмите клавишу F9.
Щелкните правой кнопкой мыши открывающий тег xsl:if и выберите Точка останова > Вставить точку останова.
В строке меню выберите XML > Запустить XSLT без отладки (или нажмите клавиши ALT+F5).
Запустится процесс отладки.
Позиция отладчика в редакторе будет находиться на элементе xsl:if таблицы. В редакторе откроется другой файл с именем below-average.xml. Это выходной файл, который будет заполняться по мере обработки каждого узла во входном файле books.xml.
В нижней части окна Visual Studio отображаются окна Видимые, Локальные и Контрольное значение 1. В окне Локальные отображаются все локальные переменные и их текущие значения. Сюда относятся переменные, определенные в таблице стиля, а также переменные, используемые отладчиком для отслеживания узлов, которые в настоящий момент находятся в контексте.
Контрольные значения - окно
Мы добавим две переменные в окно Контрольное значение 1, чтобы можно было проверить их значения по мере обработки входного файла. (Можно также использовать окно Локальные для просмотра значений, если нужные переменные уже есть.)
В меню Отладка выберите Окна > Контрольные значения > Контрольное значение 1.
Окно Контрольное значение 1 станет видимым.
Введите $bookAverage в поле Имя и нажмите клавишу ВВОД.
В поле Значение отобразится значение переменной $bookAverage .
В следующей строке введите self::node() в поле Имя и нажмите клавишу ВВОД.
self::node() является выражением XPath, которое вычисляется до текущего узла контекста. Значение self::node() выражения XPath является первым узлом книги. Оно меняется по мере прохождения преобразования.
Разверните узел self::node() , а затем разверните узел, значение которого равно price .
Отобразится значение цены книги для текущего узла книги, и его можно легко сравнить со значением $bookAverage . Так как цена книги ниже средней, при продолжении процесса отладки условие xsl:if должно выполняться.
Пошаговое прохождение кода
Чтобы продолжить выполнение, нажмите клавишу F5.
Так как первый узел книги удовлетворяет условию xsl:if , узел книги добавляется в выходной файл below-average.xml. Отладчик продолжает выполнение, пока не будет вновь достигнут элемент xsl:if в таблице стилей. Теперь отладчик располагается на втором узле книги в файле books.xml.
В окне Контрольное значение 1 значение self::node() меняется на второй узел книги. Проверив значение элемента цены, можно определить, что цена выше средней; таким образом, условие xsl:if не выполняется.
Чтобы продолжить выполнение, нажмите клавишу F5.
Так как второй узел книги не удовлетворяет условию xsl:if , узел книги не добавляется в выходной файл below-average.xml. Отладчик продолжает выполнение, пока не будет вновь достигнут элемент xsl:if в таблице стилей. Теперь отладчик располагается на третьем узле book в файле books.xml.
В окне Контрольное значение 1 значение self::node() меняется на третий узел книги. Проверив значение элемента price , можно определить, что цена ниже средней. Таким образом, условие xsl:if должно выполняться.
Читайте также: