Pull to refresh

Инструменты для работы с XML в Visual Studio 2008

Reading time 8 min
Views 20K
Original author: Stan Kitsis
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 показан пример вставки фрагмента.

image

Рисунок 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 кода все что вам нужно сделать, набрать имя элемента также как это показано в следующем примере:

<element_name


и нажмите клавишу 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" />



Это условие означает, что схема dotNetConfig30.xsd должна быть ассоциирована только когда текущий проект использует .NET Framework версии 3.0.

Наконец, вы можете создать цепочку ссылаясь из одного файла каталога на другой:

<Catalog href="http://mycompany/catalog.xml"/>


Работа с большими файлами

Другая важная функция редактирования которую я хотел бы отметить это поддержка редактором 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, чтобы одновременно отображались все три документа. Когда вы проходите через код трансформации, вы можете видеть входящие данные, трансформацию которая обрабатывает этот ввод и генерацию выходного файла.

image

Рисунок 2: Отладка отдельных XSLT трансформаций.

Если вы используете среду отладки C# или Visual Basic вы заметите, что отладка XSLT выглядит очень похоже на отладку других программ использующих язык CLR. Все способы управления и комбинации клавиш остаются такими же. На Рисунке 2 вы также можете видеть окно Locals (Локальные переменные), в котором могут отображаться скрытые переменные XSLT (self, position, и last), точно также как и переменные которые определены в вашем шаблоне. Также вы можете видеть окно стека вызова, которое вы можете использовать, чтобы перемещаться к различным шаблонам XSLT вверху и внизу стека. Также вы можете использовать отладчик XSLT для установки точек останова и в коде XSLT и в XML документах.

CLR-интегрированная отладка

Хотя отладка отдельных трансформаций полезна, иногда вам нужно отлаживать XSLT как часть вашего приложения на C# или Visual Basic. Отладчик XSLT, который тесно интегрирован с другими отладчиками CLR позволяет вам бесшовно переходить из C# к XSLT, а затем к Visual Basic во время отладки приложения. Следующий пример показывает фрагмент кода C# который использует класс XslCompiledTransform для инициализации XSLT трансформации:

XslCompiledTransform xsltcmd =
new XslCompiledTransform(true);
xsltcmd.Load(XSLTFile);
XmlUrlResolver resolver = new XmlUrlResolver();
XmlWriter writer = XmlWriter.Create(OutputFile);

xsltcmd.Transform(XMLFile, writer);


* This source code was highlighted with Source Code Highlighter.


Если вы установите точку останова на вызове метода и пройдете в него, отладчик покажет вам стилевую таблицу XSLT (Рисунок 3). Все функции описанные в разделе отладки отдельной таблицы стилей также применимы здесь. Единственным исключением является возможность устанавливать точки останова в файлах данных. Эта функция не доступна, когда вы переходите из в XSLT из другой программы на CLR. Все остальное будет вести себя точно также как описано в выше.

image

Рисунок 3: Отладка XSLT трансформации из приложения C#.

Таблица 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

XML редактор предоставляет хорошую основ для разработчиков, чтобы создавать пользовательские дизайнеры поверх него. Рисунок 4 как это было сделано в предыдущей версии Visual Studio (Visual Studio 2005). Разработчики могли построить расширение поверх XML Editor через общий доступ к буферу. Они должны били создавать пользовательские дизайнеры путем предоставления общего доступа к буферу IVsTextLines и анализировать XML используя System.Xml.XmlReader или XmlDocument. Don Demsak использует этот способ, когда создает XPathmania и дополнения XPath к Visual Studio (для дополнительной информации об XPathmania, см http://www.donxml.com). Однако, так как интеграция происходит на уровне буфера, этот способ создает много больших правок буфера. В дополнение к этому, он имеет некоторые ограничения потому что анализатор System.Xml принимает только валидный XML в то время как дизайнеры, по определению, должны работать с не валидными файлами.

image

Рисунок 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.

image

Figure 5: Способ расширения XML редактора в Visual Studio 2008.
Tags:
Hubs:
+17
Comments 10
Comments Comments 10

Articles