В начале этой главы мы сказали, что Java предоставляет переносимый код, а XML предоставляет переносимые данные. Прока мы прошлись по всему XML и узнали как определять его, как структурировать, как манипулировать и как выводить. Но если мы хотим, чтобы в XML были переносимые данные, мы должны быть способны трансформировать XML так, чтобы он мог читаться другим приложением, отображаться или печататься. Extensible Stylesheet Language (XSL) предоставляет возможность для доступа и управления данными из XML документа.
XSL сам по себе является XML диалектом и предоставляет два различных и полезных механизма для обработки и манипуляции XML документом. Многие из конструкторов используются обоими механизмами, но каждый играет разную роль. Один из них занимается форматированием данных, а другой занимается трансформацией данных. Когда XSL используется в качестве языка форматирования, страница стилей состоит из объектов форматирования, которые подготавливают документ для отображения, обычно в браузере.
Когда XSL используется для трансформации, XSL принимает форму Extensible Stylesheet Language Transformation (XSLT). Страница стилей XSLT состоит из шаблонных правил, которые соответствуют разделу спецификации XML документа и позволяют преобразовать содержимое XML документа. XSLT может не только преобразовать XML документ из одного диалекта в другой (чаще всего HTML), но и предоставляет многие другие возможности для получения данных из XML документа и управления этими данными.
Java API for XML Processing (JAXP) Summer 2002 Pack поставлялся с другим инструментом от Apache, называемым Xalan. Xalan - это инструмент от Apache.org для выполнения трансформаций. Для выполнения трансформации необходимо два инструмента: синтаксический анализатор и XSL процессор. Мы будем использовать эти инструменты от Apache.
XSLT документ, называемый страницей стилей, содержит серию шаблонов. Каждый шаблон соответствует элементу, атрибуту или и тому, и другому внутри обрабатываемого XML документа. Основной конструктор для шаблонов:
<xsl:template match="pattern"> … rule body … </xsl:template>
Шаблон имеет открывающий (<xsl:template>) и закрывающий (</xsl:template>) тэги. Обычно каждый открывающий тэг шаблона имеет соответствующий атрибут, который указывает часть входного XML документа, для которого предназначен шаблон.
Тело шаблона может состоять из следующего:
- Более детализированного условия выбора или условий сравнения и другой логики
- Специфичный тип выполняемого действия или действий
- Текст, который станет частью результата наряду с выбранным содержимым XML документа
В этом месте вы увидите механизм трансформации XSLT. Во-первых, XML должен пройти синтаксический разбор, а XML документ принять форму дерева. Узлы этого дерева становятся важны в механизме создания сравнений. Во-вторых, это дерево передается в XSLT процессор. XSLT процессор сравнивает узлы дерева с инструкциями в странице стилей. Когда XSLT процессор находит соответствие, он выводит фрагмент. И наконец, вывод сериализируется в другой формат, такой как HTML или новый XML файл.
Давайте создадим пример.
← | Сериализация DOM Level 3 | XML в HTML: Отображение меню | → |