Предварительная подготовка xml xslt

Содержание

Создание отчетов на основе xsl-трансформаций (xslt)

Опубликовано:
25 января 2020 в 07:59

XSLT (eXtensible Stylesheet Language Transformations) — язык преобразований xml-документов.

Введение

Задача генерирования отчетности в системе DIRECTUM является одной из наиболее востребованных.

В этой статье описан возможно не самый широко распространенный способ формирования html-отчетов на основе xslt-преобразований. Но несомненно заслуживающий внимания, как один из наиболее удобных и наглядных (если сравнить например с rtf-отчетом).

Если очень коротко, то xslt-преобразование заключается в трансформации xml-схемы с данными в отчет на основе предварительно подготовленного шаблона.

Для примера отчета описанного в статье будет выводится список контрагентов с их наименованием, ИНН и адресом.

Чтобы сформировать отчет понадобятся две составляющие:

— xml-данные для отчета

Данные в формате xml

Данные в формате xml можно получить прямым sql-запросом:

Описанный выше запрос вернет данные в таком формате:

Данные нужно обернуть в тег и сохранить в файл, добавив заголовок:

Вторая строка заголовка xml-файла данных важна, в ней указано, что в файле C:\Temp\template.xsl хранится шаблон отчета в который необходимо передать данные.

В итоге получится такой xml-файл:

Если открыть полученный xml-файл, браузер будет использовать указанный в заголовке шаблон и подставит данные в него.

xsl-шаблон

Далее необходимо создать шаблон, имя файла которого указано в заголовке xml-файла. xsl-шаблон отчета представляет собой обыкновенную html-страницу с особым заголовком:

В тэге указаны версия и ссылка пространства имен xsl-преобразования. В остальном шаблон — это обыкновенная html-страница.

Теперь нужно сотворить немного магии и указать какие именно данные из xml и в каком виде вставить в шаблон отчета.

Для работы с данными в xsl-шаблоне используются специальные теги.

Цикл for-each и правила выбора

Чтобы перебрать все узлы из xml-файла данных нужно использовать конструкцию:

Она позволит перебрать все дерево данных. Для того, чтобы выбрать только определенные данные из дерева используется правило выбора select=»orgs/org». Правила описаны на языке запросов XPath. В текущем примере будет последовательно отобрана каждый узел из .

Сортировка

Если необходимо, чтобы записи отображались не в порядке следования в xml-файле, а сортировались, то нужно указать это в шаблоне:

Теперь записи будут перебираться предварительно отсортированными по наименованию.

Отображение значения

Но просто перебрать не достаточно, нужно вывести в отчет нужные данные, для этого существует конструкция:

Конструкция отобразит значение тэга (наименование контрагента).

Гиперссылки

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

Сase-оператор и фильтрация

Пусть ИНН контрагента отображается в отчете не просто так. Если ИНН в карточке отсутствует, то будет выводится сообщение об отсутствии ИНН. Для этого необходимо использовать конструкцию:

В конструкции choose с помощью фильтра test проводится проверка содержимого тэга (ИНН) на пустое значение ( ). Если содержимое не пусто, то выводиться значение. В других случаях выводится сообщение «ИНН не указан».

Еще один фильтр

С помощью фильтра возможно реализовать еще одну «рюшечку», которая будет помечать контрагентов с ИНН начинающихся например с кода региона «18». Выглядеть это будет так:

Конструкция для всех записей ИНН которых начинается с «18» дополнительно выведет значок ♥ .

В конечном итоге получится такой код шаблона:

Результат

А если открыть xml-файл в браузере, то получится такой отчет:

Вывод

В статье описаны только несколько базовых возможностей xsl, такие как фильтры, сортировка, цикл, case-конструкция. Кроме них существуют еще интересные возможности. Надеюсь, статья подтолкнет изучить и их. Возможно после этого построение отчетов станет более интересным.

А если к отчету подключить такой мощный инструмент как javascript, то описанный отчет легко можно сделать интерактивным. Например добавить элемент, позволяющий проводить какую-либо фильтрацию. Или отображать графики по данным отчета.

Какие есть плюсы при реализации отчетов описанным способом:

— Требуется разработка относительно небольшого количества прикладных вычислений;

— Разработка шаблона наглядна и также относительно нетрудоёмка.

Всё описанное в статье легко интегрируется в аналитический отчет, ссылка на который приведена ниже.
Пример xsl отчета

Собственно отображение задач в Директум выполняется как раз таким образом.

Опять же трансформацию можно производить программно:

Не увидел в статье ответа на вопрос зачем нам выгружать данные сначала в xml-файл, а потом еще и писать xslt (который еще и изучить надо), если можно сразу выгрузить в формате html (по сути это тот же xml).
Аргументируйте, пожалуйста, и приведите примеры, применимые к отчетам Directum.
Обычно разделение данных и представления делают когда надо одни и те же данные надо по-разному отображать (отображать в нескольких представлениях динамически формируемые данные или если данные хранятся где-то и отображение может со временем меняться).
С отображением схем задач понятно почему надо использовать xslt — у нас данные уже есть, их надо только отобразить. Я не встречал никогда чтобы данные еще где-то хранились в xml и их надо было только отобразить.
К недостаткам представленного подхода еще можно отнести то, что xsl-файл еще надо где-то размещать, чтобы отчет можно было переслать по почте, например.

Александр, статья писалась для разработчиков, которые еще не слышали (или слышали, но краем уха) про xslt. И призвана подтолкнуть их к изучению этой темы.
По поводу того «зачем нам выгружать данные сначала в xml-файл» — можно и не выгружать, а реализовать по-другому, как например выше в комментарии описал Роман.
«а потом еще и писать xslt (который еще и изучить надо)» — именно для этого статья и писалась, чтобы начать изучать xslt.
Про «сразу выгрузить в формате html» — чтобы это сделать, все равно нужно вычисления писать, которые данные «обернут» в тэги html-разметки. И такой путь не соответсвует парадигме MVC. Если отчетик небольшой и известно, что никаких изменений в нем не предвидится, то, возможно, отступить от этой парадигмы не страшно.
Но если предполагается, что периодически необходимо вносить доработки в отчет, то поддержка такого отчета станет трудоемкой задачей.
К примеру сейчас сущетсвует достаточно много государственных сервисов, которые выдают информацию в виде xml. Эти данные можно сразу отображать в удобно перевариваемом виде, в нужной форме.
А если случится так, что форма видоизменится и/или в xml добавятся новые (или удалятся старые) реквизиты, то достаточно подкорректировать xsl-шаблон, чтобы форма отчета осталась актуальной не проводя при этом доработок вычислений.
Что касается размещения xsl-файла. То размещать его можно, к примеру, в аналитическом отчете. А чтобы отправить отчет сформированный по xsl-шаблону сам шаблон уже не нужен, можно отправить html-страницу построенную на основе шаблона.

Алексей,
Если у нас уже есть xml и нам надо его отобразить пользователю, то я согласен что надо использовать xslt.
Не надо показывать незнающим разработчикам что надо сначала выгружать sql-запросом в xml, учить xsl и писать преобразование. Думаю, нужна статья, показывающая, что в большинстве случаев html можно и надо формировать прямо на sql. Отображение sql -> html частая задача, xml->html редкая. Изучать что-то новое (при этом сомнительно удобное) и делать на нем все подряд отчеты не стоит. Потому что тем, кому достанется такое наследие, тоже придется учить xslt.
Разделить данные и представление можно в рамках одного sql-запроса. Так что выгружать сначала в xml, а потом его преобразовывать в HTML xslt нет особого смысла, ведь промежуточный xml нигде использоваться не будет. Вот как выглядит sql-запрос для такого же результата:

Это я всё к тому, что статья в каком-то неправильном ключе подана. Сам по себе материал полезен, но логичнее было бы сразу указать, что такой подход стоит использовать если уже есть xml или он для чего-то нужен, а не как промежуточное звено. А лучше сначала написать статью про формирование html-отчетов с помощью for xml, про эту штуку думаю тоже мало народу знает, хотя она ну очень удобная. SQL знают все, учить почти ничего нового не надо.

Александр,
Выше я уже написал, что статья для того, чтобы подтолкнуть разработчиков к изучению xsl. И приведенный пример не является идеальным ни с технической, ни с точки зрения бизнес-процессов. Это просто демо-пример с помощью которого описаны базовые xsl-конструкции.
Отвечу на некоторые Ваши утверждения, которые кажутся мне спорными:
«Отображение sql -> html частая задача, xml->html редкая» — очень спорное утверждение. Слишком много ньюансов для решения различных задач и в каждой задаче луший вариант необходимо выбирать. Универсального нет.
«лучше сначала написать статью про формирование html-отчетов с помощью for xml» — думаю, тема тоже интересная, но эта статья именно про xsl.
«SQL знают все, учить почти ничего нового не надо» — тоже спорное утверждение.
«Разделить данные и представление можно в рамках одного sql-запроса» — можно. Но далеко не всегда нужно. Все-таки основная задача SQL-сервера не в этом. Особенно это касается крупных заказчиков, у которых SQL-сервер загружен «основной» работой. И, опять же, цель статьи была — рассказать именно про xsl.
И по результатам переписки, думаю Вам есть что рассказать по тематике отображения данных базы данных в виде html-страницы. Если бы такая статья(и) появились на клабе, то было бы очень здорово. Сам бы с удовольствием почитал.

Алексей, давайте не уходить в сторону от основного вопроса, он звучит так: зачем мне делать SQL->XML->[xslt]->HTML, если можно SQL->HTML.
1) Если у нас уже есть XML (в таком формате хранятся данные или в таком формате откуда-то приходит), то я согласен, что хорошим вариантом отображения является использование XSLT. Собственно статья об этом (а не о том, что ВООБЩЕ отчеты хорошо и удобно строить используя xslt). И это надо указать в статье, и не приводить смущающих примеров (с выгрузкой в XML с SQL) и сравнивать с rtf. Подавляющее большинство отчетов в Directum строится на основе данных из SQL-таблиц, а не XML.
2) Аргумент про то, что это не задача SQL — он смешной. SQL это делать умеет, и делает это быстро, дешево и удобно. По сравнению с «лишней» нагрузкой, которую создает работа с ОМ и говнокод, работа с XML — просто семечки. А еще напомню про существование приложений (я лично работал с WebTutor), для которых XML — чуть ли не основной тип хранимых данных и все выборки и преобразования XML производятся в БД. Ну и писать такое и в примере делать SQL->XML как-то нелогично.
3) Чтобы использовать Ваш подход, надо знать и SQL->XML и XSL. Мой же вариант проще, достаточно знать SQL->XML(HTML). Я не услышал ни одного аргумента в пользу SQL->XML->[xslt]->HTML. Сначала Вы говорите, что мой подход «не соответсвует парадигме MVC», а когда я пишу что данные и представление можно разделить и в рамках одного SQL-запроса и XML в вашем подходе ИСПОЛЬЗУЕТСЯ ТОЛЬКО КАК ПРОМЕЖУТОЧНОЕ ЗВЕНО (а не как модель), Вы пишете что разделять модель и представление «далеко не всегда нужно».

Вы можете придумать конкретный пример, когда нам гораздо удобнее и разрабатывать и поддерживать веб-отчет используя SQL->XML->[xslt]->HTML, а не SQL->HTML? Я лично изучал xsl, пытался пользоваться. Но за 5 лет реально что-то делал SQL->XML->[xslt]->HTML 1 раз и то потом переделал на SQL->HTML потому что xsl было излишеством, которое, к тому же, мало кто знал. Я видел веб-контролы в канцелярии на xslt и мое мнение — они слишком сложны для такой простой задачи. SQL->HTML я использовал раз 50 наверно уже (как для простых задач, так и для сложных 1, 2 etc). И не потому что не знаю xsl, а потому что SQL->HTML проще и удобнее. Возможно мне не попадались подходящие задачи, но такой вот у меня опыт. А Вы сколько раз делали SQL->XML->[xslt]->HTML и SQL->HTML?

Отображение XML с использованием XSLT

При помощи XSLT вы можете преобразовывать XML документ в HTML.

XSLT (eXtensible Stylesheet Language Transformations), язык преобразования XML документов, является рекомендованным языком таблиц стилей для XML.

XSLT более сложный язык таблиц стилей, чем CSS. Используя XSLT вы можете добавлять/удалять элементы и атрибуты в конечном файле отображения. Также, вы можете реорганизовывать и сортировать элементы, осуществлять проверки и принимать решения о том, какие элементы скрывать, а какие отображать. И многое другое.

XSLT использует XPath для поиска информации в XML документе.

Пример XSLT

Будем использовать следующий XML документ:

Перед выводом в браузер используем XSLT для преобразования XML в HTML.

Формирование Xml (с использованием xslt)

Xml разработанной формы можно сформировать в конструкторе, в режиме предпросмотра формы. Предварительно создано событие на форме (Рис.6):

Рисунок 6. Событие для формы

Илон Маск рекомендует:  Что такое код msql_numrows

Для его редактирования необходимо щелкнуть на нем, после чего откроется окно (Рис.7):

Рисунок 7. Настройка события для формы

Тип события: submit (отправка данных), init (инициализация), change (изменение), final (конечная отправка данных). Обязательный параметр для формирования Xml в конструкторе;
Service key: — указывается ключ в juddi для данной услуги. Обязательный параметр для формирования Xml в конструкторе (обычно указывается мнемоника формы, если на данный момент не известна мнемоника формы, то можно указать id формы, а потом обновить);
Soap action: — указывается при наличии. Необязательный параметр для формирования Xml в конструкторе;
AppData Transformer: — указывается код шаблона xslt-преобразования блока Appdata (для услуг по МР 2.4 и выше). Необязательный параметр для формирования Xml в конструкторе;
Request Transformer: — указывается код шаблона xslt-преобразования запроса. Необязательный параметр для формирования Xml в конструкторе;
Response Transformer: — указывается код шаблона xslt-преобразования ответа на запрос. Необязательный параметр для формирования Xml в конструкторе;
Submit type: — указывается тип отправки (FINAL — конечная отправка данных; SYNC — синхронная отправка; ASYNC — асинхронная отправка). Обязательный параметр для формирования Xml в конструкторе (FINAL);
xmlPayloadType: — указывается тип xml (PUBLIC_API_XML — формируется xml с набором вложенных объектов, с обязательно наименованными тегами; PUBLIC_API_XML — выбирается (но не обязательно) в случае применения xslt; PRIMARY_XML – формируется xml без вложенных объектов, SOAP-запрос)

После нажатия на кнопку Предпросмотр формы, необходимо заполнить поля формы и нажать на кнопку Перейти к подаче заявления. После этого появится окно xml формы:

Рисунок 8. xml формы (submit, FINAL, PUBLIC_API_XML)

В случае, если на стороне ведомства такая структура xml не проходит (например, когда веб-сервис уже разработан и принимает запрос в определенном формате), в этом случае можно выполнить преобразование xml с помощью xslt. Контрольные примеры запроса и ответа на запрос, как правило, указываются в ТЗ, либо в руководстве пользователя веб-сервиса при регистрации в СМЭВ.

Чтобы создать xslt-шаблон нужно в конструкторе нажать на кнопку Загрузить XSLT (Рис. 9)

Рисунок 9. Окно выбора xslt-шаблона или создание нового

При нажатии кнопки Новый, откроется окно для ввода данных по новому xslt-шаблону (Рис. 10):

Рисунок 10. Окно создания нового xslt-шаблона

Код системы – код ведомства;

Код сервисы – мнемоника формы, либо другая понятная разработчику аббревиатура;

Содержимое файла – текст разработанного xslt-шаблона

При нажатии на кнопку Редактировать, откроется окно с возможностью правки xslt-шаблона (Рис.11):

Рисунок 1. Режим редактирования xslt-шаблона

На текущий момент конструктор не имеет возможности автоматически генерировать xslt-шаблон, поэтому для разработки и проверки xslt-шаблона необходимо использовать сторонние ресурсы (например, http://www.w3schools.com/xsl/, http://ftemk.mpei.ac.ru/xslt/ )

Чтобы на форму назначить xslt-шаблон заявления, необходимо в событии для формы в поле
Request Transformer: выбрать нужный шаблон (Рис.12):

Рисунок 12. выбор xslt-шаблона в событии

Корректность xslt-шаблона можно проверить в режиме предпросмотра формы – если после нажатия на кнопку «Перейти к подаче заявления» появилось окно xml формы, внутри которого указана Xml заявления с веденными данными на форме после xslt.

Пример xml без использования xslt-шаблона:

Пример xml с использованием xslt-шаблона:

Пример xslt-шаблона который приводит данное преобразование:

Если после нажатия на кнопку «Перейти к подаче заявления» окно xml формы не появилось или в нем ничего нет (либо текст ошибки), то это значит, что xslt-шаблон некорректно работает.

Аналогично формируется xslt-шаблон для блока Appdata, если по требованиям к сервису в нем передаются данные. Требования к сервису ведомства можно узнать в ТЗ, либо в руководстве пользователя веб-сервиса, указанном при регистрации в СМЭВ.

Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: Для студента самое главное не сдать экзамен, а вовремя вспомнить про него. 10040 — | 7504 — или читать все.

188.64.174.135 © studopedia.ru Не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования. Есть нарушение авторского права? Напишите нам | Обратная связь.

Отключите adBlock!
и обновите страницу (F5)

очень нужно

Ulric Wilfred’s wiki

Let the wiki begin.

Облако тегов

Дерево навигации

Системные страницы

Добавить страницу

(X-Task: «On your Client! Get XML! Get XSL! Do XHTML! Go!»)

Вступление

Статья рассматривает преобразование XML в XHTML посредством XSLT на клиенте средствами JavaScript. К примеру, у вас есть какие-либо данные в виде XML, а вам требуется по какому-либо действию клиента (по клику на ссылке), оформить их в [X]HTML и динамически вставить в страницу. Это не так сложно, но по пути, как оказалось, встречается несколько подводных камней — в основном, относительно кросс-браузерности этого подхода и малой освещённости процесса в сети. Генерация XHTML-страниц средствами браузера (прямой запрос на XML файл, содержащий информацию о стиле) — это другая тема, она намного проще, и здесь затронута не будет.

Задача будет рассмотрена на банальном примере личного сайта. Дано: Файл с контактными данными (XML), некая главная страница (XHTML) и пять браузеров: Firefox 3, Opera 9.5, IE7, Safari 3, Google Chrome. На главной странице есть ссылка, при нажатии которой контактные данные преобразуются в несортированный список (UL) и отображаются в специально выделенной области прямо на этой странице. Это реальный рабочий пример, который я сейчас использую для создания своего сайта (ещё не выложенного).

Контактные данные, при их большом количестве, можно сгруппировать, поэтому XML-схема построена с учётом группировки элементов. Группа имеет краткое имя (shortname) для создания id у списка (возможно, потребуется оформить каждую группу по-особому) и, собственно, имя группы. XML-файл может содержать contact-ноды и вне групп, но в данном примере в этом нет необходимости. Все контакты имеют тип (type) для создания корректных ссылок в будущем (это мы также опустим). С остальным, вроде бы, всё понятно:

Структура довольно-таки проста, поэтому приведу сразу пример файла (любое сходство с реальными данными какого-либо индивидуума полностью случайно и приведено не намеренно):

Стиль генерирует XHTML-код, в виде списка UL, состоящего из негруппированных контактов и вложенных списков для групп. Поскольку результат вывода именно X HTML, требования к оформлению результата несколько строже, чем если бы это был обычный HTML. Поэтому следует обратить внимание на следующие моменты:

  • Важно: В результате преобразования должен получаться файл с одной и только одной корневой нодой, иначе Safari и Google Chrome (Читай: WebKit) не смогут добавить результирующий элемент в документ. Это довольно разумно, поскольку для всех XML объектов (результат в виде XHTML из их числа) есть правило: корневой элемент должен быть только один (There can be the only one).
  • Важно: В качестве xsl:output method должен быть указан либо xml либо html (однако, в последнем случае, при использовании пронстранств имён, таковые будут потеряны). Некоторые ставят это значение в xhtml и в результате получают некорректную обработку или ошибки на клиенте — пока этого метода не введено и не следует его использовать. Для этого есть media-type.
  • Код генерируется без заголовков XML: omit-xml-declaration установлен в yes и xmlns не указывается, иначе в результате получится недоXHTML-файл с XML-заголовком, не содержащий html, head и body. Генерация DOCTYPE (doctype-system, doctype-public) также отключена.

В результате преобразования получается такой блок XHTML:

JavaScript

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

Загрузка XML-файлов

Для начала нам потребуется загрузить оба файла — XML и XSLT. По своей природе они оба — файлы XML, Internet Explorer предоставляет для этих целей ActiveX-объект XMLDOM, Firefox и Opera — фунцию createDocument, позволяющую загрузить XML-файл в созданный объект. Safari и Chrome (Читай: WebKit), однако, предоставляя эту же функцию, возвращают объект, не поддерживающий загрузку — опять же, вполне разумно, в соответствии со спецификациями W3C.

Метод 1. XMLHttpRequest

Поэтому, плюнув на всё, мы можем загружать файлы через XMLHttpRequest (синхронный или нет — по вашему выбору), используя всем известный шаблон AJAX.

Предложу вам свою версию, вы же можете использовать какую только заблагорассудится. Моя версия отличается тем, что принимает в параметры функцию, которая будет вызвана при успешном завершении вызова, позволяет делать и POST и GET запросы, позволяет передавать объекты и позволяет делать синхронный вызов (тогда она возвращает объект по его завершению).

При использовании этого метода, функция загрузки XML будет выглядеть довольно просто — например, так:

Метод 2. В зависимости от браузера

Однако, если вы хотите использовать именно те способы, которые (как ни забавно) рекомендуются на W3Schools, функцию loadXML придётся усложнить, потому что приведённые на W3Schoolds примеры не работают на браузерах WebKit (Читай: Safari и Chrome). Пусть это будет, так сказать, «рекомендованный вид». Подозреваю, правда, что все эти обходы скрывают под собой те же вызовы XMLHttpRequest, поэтому, если вы не сторонник неоправданных действий, пропустите этот раздел.

Итак, функция будет делать прямой синхронный вызов XHMHttpRequest (вернее, функции описанной в предыдущем разделе) только в случае вызова из Safari, в остальных же случаях прибегать к средствам конкретного браузера (Не забываем правило: Никаких прямых проверок браузера, только проверка, поддерживается ли вызываемая функция):

В результате, функция возвращает XML-объект по заданному имени файла. Можно приступать собственно к трансформации.

Преобразование через XSLT

Преобразованием будет заниматься ещё одна функция, которая будет принимать в качестве аргументов пути к XML-файлу и XSL-файлу. Загружать эти файлы она будет описанной выше функцией loadXML. А возвращать эта функция будет строку с XHTML-кодом, который можно будет вставить прямо в innerHTML нужного элемента.

Почему строку? Потому что метод transformFragment объекта XSLTProcessor не поддерживает рендеринг XML (xsl:output method="xml"), а поддерживает только HTML (xsl:output method="html"). В результате преобразования с xsl:output method="xml" и transformFragment генерируется корректный DocumentFragment, который, однако, при вставке в XHTML-код действует как некая XML-нода — поэтому визуально виден только, так называемый, plain text. Если вас не смущает потеря пространств имён, вы можете изменить xsl:output method на html и использовать transformFragment, добившись в результате, чтобы функция возвращала DocumentFragment.

В случае Internet Explorer используется функция transformNode XML-объекта, в остальных браузерах используется XSLTProcessor.

Всё, весь необходимый код готов и вы можете использовать функцию getStylingResult для преобразования XML-файлов и вставки результата в XHTML. Например, таким образом:

Как итог, мы получили действительно кросс-браузерную версию обработки XML на клиенте. Спасибо за внимание.

XML и XSLT в примерах для начинающих (стр. 1 )

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4

XML и XSLT в примерах для начинающих

8. XML и XSLT в примерах для начинающих

Для всех примеров ниже использован стандарт языка XSL. Широко применяется также более современная модификация этого стандарта — язык XSLT, детальнее про который можно прочитать в \xml\XSLTutorial или MSDN.

Рассмотрим простой пример XML-файла (ex01.xml). Этот и остальные примеры можно найти в папке \xml\ XSLTForBeginers на диске.

Если мы откроем этот файл в браузере Internet Explorer, то увидим тот же самый текст, который приведен выше, вместе со всеми тегами и служебной информацией. Но нам не нужны теги и служебная информация! Мы хотим видеть только ту информацию, которая относится к делу, а при помощи тегов — управлять внешним видом этой информации. Эта задача решается легко и просто: необходимо к XML-файлу добавить шаблон преобразования — XSL-файл.

Перепишем наш XML-файл в следующем виде (ex01-1.xml).

И создадим XSL-файл ex01-1.xsl. Текст файла приведен ниже.

Если мы теперь откроем файл ex01-1.xsl в браузере Internet Explorer, то мы увидим, что наша задача решена, — на экране осталась только необходимая нам информация, все теги исчезли. Результат, который вы получите на экране браузера, приведен ниже.

«Заметки об XSL»

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

Перепишем XML-файл. Информационную часть изменять не будем, а шаблон укажем другой ex01-2.xml.

Создадим XSL-файл ex01-2.xsl. Текст файла приведен ниже.

Если мы теперь откроем файл ex01-2.xsl в браузере Internet Explorer, то результат будет другим.

«Заметки об XSL»

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

Первый способ требует трудоемкого программирования, второй способ значительно увеличивает нагрузку на сервер базы данных, производительность которого часто является узким местом системы, — пользователю всегда хочется получать результаты быстрее.

XML и XSL — это исчерпывающее решение описанной выше проблемы. Фактически XML-страница — это и есть временный буфер для результатов запросов. Только вместо нестандартного и трудоемкого программирования мы теперь используем стандартный механизм XSL.

Есть и еще одно соображение, которое может быть существенным для разработчиков баз данных. Большинство современных СУБД могут форматировать результаты запроса к базе данных в виде XML-файла. То есть при построении интерфейса пользователя в рамках технологии XML и XSL мы добиваемся определенной независимости от поставщика СУБД. В части организации вывода — практически полной независимости. А эта часть весьма велика в большинстве прикладных систем, ориентированных на работу с базами данных. Конечно, помимо вывода есть еще ввод и серверная обработка бизнес-логики, но здесь вам придется искать какие-то иные решения.

Первые шаги

Разберем теперь более подробно первый пример. Напомним его текст.

Первая строка информирует браузер о том, что файл имеет формат XML. Атрибут version является обязательным. Атрибут encoding не является обязательным, но если у вас в тексте есть русские буквы, то необходимо вставить этот атрибут, в противном случае XML-файл просто не будет обрабатываться, — вы получите сообщение об ошибке.

Илон Маск рекомендует:  Что такое код udm_error

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

Элементы могут иметь атрибуты, значения которых тоже могут обрабатываться в соответствии с шаблоном.

На верхнем уровне XML-файла всегда находится один элемент. То есть файл вида

не будет обрабатываться браузером. Для преобразования в корректный XML-файл нужно добавить теги элемента верхнего уровня, например

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

Перейдем теперь к шаблону преобразования — к XSL-файлу. Задача XSL-файла — преобразовать дерево XML-файла в другое дерево, которое, например, будет соответствовать формату HTML и может быть изображено на экране браузера с учетом форматирования, выбора шрифтов и т. п.

Для того, чтобы браузер выполнил необходимое преобразование, нужно в XML-файле указать ссылку на XSL-файл

Рассмотрим теперь текст XSL-файла

Первая строка файла содержит тег элемента xsl:stylesheet. Атрибуты элемента — номер версии и ссылка на пространство имен. Эти атрибуты элемента xsl:stylesheet являются обязательными. В нашем случае пространство имен — это все имена элементов и их атрибутов, которые могут использоваться в XSL-файле. Для XSL-файлов ссылка на пространство имен является стандартной.

Заметим, что XSL-файл является одной из разновидностей XML-файлов. Он не содержит пользовательских данных, но формат его тот же самый. Файл содержит элемент верхнего уровня xsl:stylesheet, а далее идет дерево правил преобразования.

В настоящем документе мы не будем подробно пояснять, что означает каждый элемент XSL-файла. Мы будем приводить различные примеры и показывать результат в каждом примере, что даст возможность самостоятельно сопоставить различные элементы XSL-файла и инициируемые этими элементами преобразования исходного XML-файла с пользовательской информацией. Заметьте также, что значение атрибута select и подобных со смыслом «выбрать» записывается на специальном языке XPath, о котором можно прочитать в кратце на диске \xml\XPathTutorial, а подробнее в MSDN.

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

В первом примере мы посмотрели, как с помощью элемента xsl:value-of можно вывести в HTML-формате содержание элемента (текст, заключенный между тегами). Теперь мы посмотрим, как при помощи того же самого элемента можно вывести значение атрибута элемента.

Знакомство с XML и XSLT. Применение XML и XSLT. Зачем изучать XML и XSLT

Этой статьей я открываю новую рубрику на блоге dmitriydenisov.com под названием «Уроки XML и XSLT». В ней мы пошагово изучим такой очень функциональный, универсальный и расширяемый язык разметки, как XML. После этого мы плавно перейдем к технологии преобразования XSLT, которая позволяет с легкостью управлять данными XML и буквально творить чудеса.

Сразу также хочется заметить, что эти технологии в основном используются на крупных коммерческих проектах. Особенно это касается запада, где XML и XSLT активно используются уже на протяжении нескольких лет. К сожалению, до нас эти технологии еще не успели дойти в полной мере.

Из этого стоит сделать вывод, что знание XML и XSLT будет для вас огромным плюсом, так как на данный момент специалистов в этой области не так уж и много. В результате через несколько лет, когда XML и XSLT наберет популярности и у нас, у вас будет огромное преимущество перед теми, кто еще не успел овладеть этой технологией. Как вы уже поняли, это позволит вам расширить свои возможности и увеличить свой доход. А кто не хочет сейчас заработать? Думаю, таких мало.

В связи с этим я решил помочь всем желающим и написать серию статей посвященных этой теме. К сожалению, на данный момент очень мало качественной и понятной литературы для самостоятельного изучения XML и XSLT. Что касается разнообразных курсов, то они зачастую являются очень дорогостоящими и не у каждого могут оказаться деньги. Честно говоря, и у меня их нет, поэтому я и занимаюсь самостоятельным обучением, а не хочу по курсамJ

Сказать по правде, не всегда все идет гладко. Порой приходится долго разбираться в некоторых моментах для того, чтобы понять всю суть того, что изучаешь. Исходя из этого, я постараюсь писать статьи максимально кратко и понятно, и в то же время не загружать вас ничем лишним. Весь материал будет разбит на части и подробно изложен в статьях объемом 800 – 1200 слов. На мой взгляд, это оптимальный размер статьи, который позволяет подробно изложить весь материал и избежать нагромождения лишней информацией. Думаю, со мной многие согласятся.

Итак, теперь давайте рассмотрим, в каком порядке будет происходить изучение XML и XSLT.

Что будет рассматриваться в рубрике «Уроки XML и XSLT»

Для начала мы изучим основы языка разметки XML, рассмотрим базовые понятия XML, а также разберемся с описанием структуры XML документов (DTD, XML Schema). Таким образом, мы получим базовые знания для работы с XML.

Далее мы перейдем к изучению основ XSLT. Для этого нам понадобится также немного изучить основы XPath. Мы рассмотрим основные элементы XSLT, а также возможности XSLT. Также на протяжении всего обучения будут приводиться разнообразные примеры для лучшего усвоения материала. Таким образом, обучение будет максимально быстрым и интересным.

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

Использование расширяемого языка разметки XML

XML – очень функциональный язык разметки, который широко применяется во многих сферах. На нем работают многочисленные программы и приложения, начиная с обычных RSS лент и заканчивая такими крупными проектами, как Microsoft Word. Убедиться в последнем очень просто. Для этого смените расширение документа Microsoft Word с docx на zip. Далее распакуйте получившийся архив, после чего перейдите в папку word. В ней вы найдете XML файлы, в которых и хранится вся информация документа Word.

Отредактировав необходимые файлы, в частности файл word/document.xml, вы можете произвести обратную процедуру и запаковать все файлы обратно в zip архив. Далее сменить расширение архива на docx и открыть файл программой Microsoft Word. В результате вы увидите все изменения, которые вы вносили в XML документ.

Таким образом, мы видим, что XML это универсальный, расширяемый язык с очень широкими возможностями. Благодаря этому он с успехом может использоваться в самых разнообразных проектах, начиная с небольших сайтов и заканчивая многомиллиардными проектами, такими как Microsoft Office.

Поскольку это только вводная статья, то мы не будем слишком углубляться в основы языка и сферы его применения. Более подробно обо всем этом мы еще поговорим в соответствующих статьях рубрики «Уроки XML и XSLT».

Использование языка преобразования XML-документов XSLT

XSLT является очень мощным инструментом для работы с XML. С его помощью можно с легкостью преобразовывать XML данные, а также получать доступ к нужным нам элементам. Например, у нас есть исходный файл с перечислениями стран в формате XML и мы хотим получить названия всех стран Европы в формате HTML. Для этого достаточно написать небольшой XSLT шаблон, который обработает XML файл и сформирует готовую HTML страницу со списком нужных нам стран. Аналогичным образом результат может быть представлен также и в XHTML, XML или просто в виде текстового документа.

По сути сам XSLT является набором правил, которые применяются к документу при определенных условиях. Его также еще называют таблицами стилей XLST, хотя, на мой взгляд, между таблицами стилей CSS и XSLT практически нет ничего общего. Таким образом, в результате обработки XML документа мы получаем то, что задано в XSLT шаблоне. Это немного похоже на работу CSS, но только лишь немного. На самом деле в XSLT есть очень большое количество других возможностей, которые никак несравнимы с возможностями CSS.

Ну а теперь давайте подведем небольшой итог.

XML и XSLT являются очень мощными инструментами, как для веб-разработчиков, так и для разработчиков в других сферах. С их помощью решения множества задач становятся очень простыми, что в свою очередь и послужило тому, что данные технологии становятся все более и более популярными. При этом зачастую не требуется знание каких-либо языков программирования, хотя сам XSLT может с успехом использоваться в связке с C++, JavaScript и т.д.

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

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

Итак, если вы не хотите пропустить выпуска других статей уже непосредственно посвященных XML и XSLT, рекомендую подписаться на новостную рассылку любым удобным для вас способом в пункте «Подписка», либо воспользоваться формой подписки, которая находится чуть ниже на странице.

На этом все. Удачи вам и успехов в изучении XML и XSLT.

how to modify xml file using xslt

I need to change the value of particular element of a node in a xml through xsl file Below is my xml data

for example, I need to select clinic9 based on its id ie 9 and change the status 0 to 1

I tried like this

But the value is not changing.

2 Answers 2

If you are trying to modify/replace a specific element, you need to match that element. For example, if you are trying to replace a specific status element, you need to match that specific element.

Сведения об XML и XSLT

На этой странице

Пользовательский интерфейс в Dreamweaver СС и более поздних версиях стал проще. В результате этого некоторые функции, описанные в этой статье, могут отсутствовать в Dreamweaver CC и более поздних версиях. Дополнительные сведения см. в этой статье.

Применение XML и XSL на веб-страницах

Язык Extensible Markup Language (XML) позволяет структурировать информацию. Подобно HTML, язык XML позволяет структурировать информацию с помощью тегов, однако теги XML не являются стандартными, как теги HTML. В отличие от последнего XML дает возможность создавать теги, которые наилучшим образом определяют структуру данных (схему). Теги поддерживают вложенность, что позволяет создать схему из родительских и дочерних тегов. Подобно тегам HTML, все теги XML-схемы содержат открывающие и закрывающие теги.

В приведенном ниже примере показана основная структура XML-файла.

В этом примере у каждого родительского тега есть 3 дочерних тега:

XML-документы не содержат форматирования, они просто служат контейнерами для структурированной информации. При наличии XML-схемы информацию можно отображать с помощью языка Extensible Stylesheet Language (XSL). Аналогично языку каскадных таблиц стилей (CSS), который позволяет форматировать тексты HTML, язык XSL позволяет форматировать XML-данные. XSL-файл, в котором определены стили, элементы страниц, макет и т. д., присоединяется к XML-файлу, так что XML-данные при просмотре в браузере будут отформатированы в соответствии с данными XSL-файла. Содержимое (XML-данные) и представление (определенное в XSL-файле) полностью отделены друг от друга, что обеспечивает больше возможностей управления оформлением информации на веб-странице. По существу, XSL представляет собой технологию представления для XML, где основным форматом вывода является HTML-страница.

Extensible Stylesheet Language Transformations (XSLT) представляют собой подмножество языка XSL, которое позволяет отображать данные XML на веб-странице и «преобразовывать» их вместе со стилями XSL в пригодную для чтения информацию в виде HTML, оформленную в определенном стиле. С помощью Dreamweaver можно создавать XSLT-страницы, позволяющие выполнять XSL-преобразование с помощью сервера приложений или браузера. При XSL-преобразовании на сервере преобразование XML- и XSL-данных и отображение их на странице выполняет сам сервер. При преобразовании на стороне клиента необходимые действия выполняет браузер (например, Internet Explorer).

Выбор применяемого метода (преобразование на сервере или стороне клиента) зависит от того, каким должен быть конечный результат, какие доступны технологии, а также от уровня доступа к исходным XML-файлам и других факторов. Оба подхода имеют свои достоинства и ограничения. Например, преобразование со стороны сервера поддерживается любыми браузерами, в то время как преобразования со стороны клиента выполняются строго в современных браузерах (Internet Explorer 6, Netscape 8, Mozilla 1.8 и Firefox 1.0.2). Преобразование на сервере поддерживает динамическое отображение XML-данных как с собственного сервера, так и из любого другого места в сети, а для преобразования на стороне клиента необходимо использовать XML-данные, расположенные локально на собственном сервере. Наконец, для преобразования на сервере требуется развертывание страниц на настроенном сервере приложений, тогда как для преобразования на стороне клиента достаточно доступа только к веб-серверу.

Руководство по XML можно найти по адресу www.adobe.com/go/vid0165_ru.

XSL-преобразование на сервере

В Dreamweaver предусмотрены методы создания XSLT-страниц, позволяющие выполнять XSL-преобразование на сервере. Когда сервер приложений выполняет XSL-преобразование, файл с XML-данными может находиться как на собственном сервере, так и в любом месте сети. Кроме того, преобразованные данные будут правильно отображаться в любом браузере. Однако развертывание страниц для преобразования на сервере представляет сложность и требует доступа к серверу приложений.

При работе с XSL-преобразованием на сервере с помощью Dreamweaver можно создавать XSLT-страницы, которые формируют полные документы HTML (XSLT-страницы целиком), либо XSLT-фрагменты, формирующие часть документа HTML. Полная XSLT-страница подобна обычной HTML-странице. Она содержит тег и тег , а также позволяет отображать HTML- и XML-данные. XSLT-фрагмент представляет собой часть кода, который используется отдельным документом, отображающим XML-данные. В отличие от целой XSLT-страницы он является независимым файлом, не содержащим теги или . Если нужно отобразить XML-данные на своей странице, то следует создать целую XSLT-страницу и связать с ней XML-данные. С другой стороны, если нужно отобразить XML-данные в определенном разделе существующей динамической страницы (например, на главной странице магазина спортивных товаров, где на одной стороне страницы отображается спортивный счет из канала RSS), то следует создать XSLT-фрагмент, затем на динамической странице вставить ссылку на него. Чаще всего XSLT-фрагменты создаются и применяются совместно с другими динамическими страницами для отображения XML-данных.

Илон Маск рекомендует:  Что такое код strchr

Первый шаг при создании страниц этого типа — создание XSLT-фрагмента. Это отдельный файл, содержащий макет, форматирование и т. п. для XML-данных, которые должны отображаться на динамической странице. Когда XSLT-фрагмент будет создан, необходимо вставить на динамической странице ссылку на него (например, на странице PHP или ColdFusion). Вставленная ссылка на фрагмент работает во многом как Server Side Include (SSI): XML-данные (фрагмент) с форматированием находятся в отдельном файле, в то время как в представлении «Дизайн» на самой динамической странице отображается шаблон для этого фрагмента. Когда браузер запрашивает динамическую страницу, содержащую ссылку на этот фрагмент, сервер обрабатывает включенную инструкцию и создает новый документ, в котором вместо шаблона отображается отформатированное содержимое фрагмента.

Поведение сервера «XSL-преобразование» используется для вставки на динамическую страницу ссылки на XSLT-фрагмент. При вставке ссылки Dreamweaver создает в корневой папке сайта папку includes/MM_XSLTransform/, которая содержит файл динамической библиотеки. Сервер приложений преобразует указанные XML-данные с помощью функций, определенных в этом файле. Этот файл отвечает за выборку XML-данных и XSLT-фрагментов, выполнение XSL-преобразования и вывод результатов на веб-страницу.

Чтобы страница отображалась правильно, необходимо, чтобы XSLT-фрагмент, XML-файл с данными и созданная динамическая библиотека находились на сервере. (Если в качестве источника данных будет выбран XML-файл (например, из канала RSS), то этот файл, разумеется, будет находиться где-то в Интернете.)

Кроме того, с помощью Dreamweaver можно создавать XSLT-страницы целиком для использования с преобразованиями на сервере. Целая XSLT-страница работает точно так же, как XSLT-фрагмент, только при вставке ссылки на целую XSLT-страницу с помощью поведения сервера «XSL-преобразование» происходит вставка всего содержимого HTML-страницы. Таким образом, перед вставкой ссылки динамическая страница (страница .cfm, .php или .asp, которая играет роль страницы-контейнера) должна быть полностью очищена от HTML-кода.

Dreamweaver поддерживает XSL-преобразование для страниц ColdFusion, ASP и PHP.

Для выполнения преобразования на сервере этот сервер должен быть правильно настроен. Для получения более подробных сведений свяжитесь с администратором сервера.

XSL-преобразование на стороне клиента

XSL-преобразования можно выполнять на стороне клиента без использования сервера приложений. С помощью Dreamweaver можно создавать целые XSLT-страницы, которые будут выполнять преобразования. Однако преобразования на стороне клиента требуют работы с XML-файлом, содержащим данные для отображения. Кроме того, преобразование на стороне клиента поддерживается только в современных браузерах (Internet Explorer 6, Netscape 8, Mozilla 1.8 и Firefox 1.0.2). Дополнительные сведения о браузерах, которые поддерживают или не поддерживают XSL-преобразование, см. в разделе www.w3schools.com/xsl/xsl_intro.asp.

Сначала создадим целую XSLT-страницу и присоединим источник XML-данных. (Dreamweaver выдаст запрос на присоединение источника данных при создании новой страницы.) Создать XSLT-страницу можно как с нуля, так и путем преобразования в XSLT-страницу существующей HTML-страницы. При преобразовании в XSLT-страницу существующей HTML-страницы необходимо присоединить источник XML-данных с помощью панели «Привязки» («Окно» > «Привязки»).

После создания XSLT-страницы необходимо привязать ее к XML-файлу, содержащему XML-данные. Для этого нужно вставить ссылку на XSLT-страницу в самом XML-файле (во многом аналогично тому, как вставляется ссылка на внешнюю таблицу стилей CSS в разделе HTML-страницы). Посетители сайта должны в своем браузере просматривать XML-файл (а не XSLT-страницу). Когда посетители сайта просматривают страницу, браузер выполняет XSL-преобразование и отображает XML-данные, отформатированные с помощью связанной XSLT-страницы.

Отношения между связанной XSLT-страницей и XML-страницей принципиально аналогичны, но они отличаются от модели внешнего CSS-файла/HTML-страницы. Содержимое HTML-страницы (например, текст) форматируется с помощью внешней таблицы стилей. HTML-страница определяет содержимое, а внешний код CSS, который пользователь никогда не видит, определяет представление содержимого. При использовании XSLT и XML ситуация прямо противоположна. XML-файл (который пользователь никогда не видит в необработанном виде) определяет содержимое, в то время как XSLT-страница определяет его представление. XSLT-страница содержит таблицы, макет, графические элементы и т. д. — все, что обычно содержит стандартная HTML-страница. Когда пользователь просматривает в браузере XML-файл, XSLT-страница форматирует содержимое.

При использовании Dreamweaver для привязки XSLT-страницы к XML-странице Dreamweaver вставляет соответствующий код в верхней части XML-страницы. Если вы являетесь автором XML-страницы, на которую указывает ссылка (то есть если XML-файл находится исключительно на вашем веб-сервере), то вам потребуется только вставить с помощью Dreamweaver соответствующий код, который свяжет эти 2 страницы. Если вы являетесь автором XML-файла, то выполняемое клиентом XSL-преобразование является полностью динамическим. То есть при любом обновлении данных в XML-файле все выходные данные HTML, использующие связанную XSLT-страницу, будут автоматически обновляться.

XML- и XSL-файлы, используемые преобразованием на стороне клиента, должны находиться в одном каталоге. В противном случае браузер считает XML-файл и найдет XSLT-страницу для преобразования, однако не обнаружит ресурсы (таблицы стилей, изображения и т. п.), заданные соответствующими ссылками на XSLT-странице.

Если вы не являетесь автором XML-страницы, на которую указывает ссылка (например, если надо использовать XML-данные из канала RSS в Интернете), то процесс будет несколько сложнее. Для выполнения преобразования на стороне клиента с помощью XML-данных из внешнего источника надо сначала загрузить исходный XML-файл в тот же каталог, где находится XSLT-страница. Если XML-страница находится на локальном сайте, то с помощью Dreamweaver можно добавить соответствующий код, осуществляющий ее привязку к XSLT-странице, и опубликовать обе страницы (загруженный XML-файл и связанную XSLT-страницу) на вашем веб-сервере. Когда пользователь просматривает в браузере XML-страницу, XSLT-страница форматирует содержимое, как в предыдущем примере.

Недостатком выполнения XSL-преобразования на стороне клиента для XML-данных, поступающих из внешнего источника, является то, что эти XML-данные являются динамическими только частично. Загружаемый и изменяемый XML-файл является, по существу, «мгновенным снимком» файла, находящегося в сети. Если исходный XML-файл в сети изменится, то его нужно будет повторно загрузить, привязать к XSLT-странице и снова опубликовать на собственном сервере. Браузер показывает те данные, которые он получает из XML-файла на вашем сервере, а не данные в исходном XML-файле.

XML-данные и повторяющиеся элементы

XSLT-объект «Повторяющаяся область» позволяет отображать на странице повторяющиеся элементы из XML-файла. Любую область, содержащую шаблон XML-данных, можно превратить в повторяющуюся область. Наиболее часто используются такие области, как таблица, строка таблицы или несколько строк таблицы.

В следующем примере показано, как XSLT-объект «Повторяющаяся область» применен к строке таблицы, где отображены сведения из меню ресторана. В первой строке отображаются 3 различных элемента из XML-схемы: пункт, описание и цена. Когда XSLT-объект «Повторяющаяся область» применяется к строке таблицы, страница обрабатывается сервером приложений или браузером, при этом таблица повторяется и в каждую новую строку таблицы вставляются уникальные данные.

Когда XSLT-объект «Повторяющаяся область» применяется к элементу в окне документа, вокруг повторяющейся области появляется тонкий серый контур с вкладками. При предварительном просмотре в браузере («Файл» > «Просмотреть в браузере») серый контур исчезает и выбранная область разворачивается с отображением указанных повторяющихся элементов XML-файла, как на предыдущей иллюстрации.

Когда на страницу добавляется XSLT-объект «Повторяющаяся область», длина местозаполнителя для XML-данных в окне документа усекается. Это происходит потому, что Dreamweaver обновляет выражение XPath (языка XML Path) для шаблона XML-данных так, чтобы оно соответствовало пути повторяющегося элемента.

Например, приведенный ниже код относится к таблице с 2 динамическими шаблонами, при этом XSLT-объект «Повторяющаяся область» к этой таблице не применялся.

Следующий код соответствует той же самой таблице, но с примененным XSLT-объектом «Повторяющаяся область».

В предыдущем примере Dreamweaver привел выражение XPath для элементов, попавших в повторяющуюся область (заголовок и описание), в соответствие с XPath во внешних тегах , а не со всем документом.

Dreamweaver в других случаях также формирует соответствующие контексту выражения XPath. Например, если перетащить шаблон XML-данных в таблицу, к которой уже применен XSLT-объект «Повторяющаяся область», то Dreamweaver автоматически отобразит выражение XPath относительно существующего XPath в закрывающих тегах .

Предварительный просмотр XML-данных

Когда для просмотра XML-данных, вставленных в XSLT-фрагмент или на целую XSLT-страницу, используется пункт меню «Просмотреть в браузере» («Файл» > «Просмотреть в браузере»), то в разных ситуациях преобразование выполняют разные алгоритмы. Для динамических страниц с XSLT-фрагментами преобразование всегда выполняет сервер приложений. В других случаях выполнять преобразование может либо Dreamweaver, либо браузер.

В следующей таблице приведены случаи применения пункта меню «Просмотреть в браузере», а также алгоритмы, выполняющие соответствующее преобразование.

Тип просматриваемой в браузере страницы Механизм, выполняющий преобразование данных
Динамическая страница с XSLT-фрагментом Сервер приложений
XSLT-фрагмент или целая XSLT-страница Dreamweaver
XML-файл со ссылкой на целую XSLT-страницу Браузер

Следующие разделы содержат рекомендации, помогающие определить методы предварительного просмотра в зависимости от задач.

Предварительный просмотр страниц для преобразования на сервере

В случае преобразования на сервере содержимое, которое в конечном счете видит посетитель, преобразуется сервером приложений. При построении динамических страниц и XSLT-страниц для преобразования на сервере всегда лучше просматривать динамическую страницу, содержащую XSLT-фрагмент, а не сам XSLT-фрагмент. В предыдущем сценарии используется сервер приложений, который гарантирует согласование представления предварительного просмотра с тем, что увидят посетители сайта, посетив соответствующую страницу. В последнем сценарии преобразование выполняет Dreamweaver, в результате чего могут возникать несколько несогласованные результаты. Для предварительного просмотра XSLT-фрагмента при его построении можно использовать Dreamweaver, однако самые точные результаты визуализации данных будут получены при просмотре динамической страницы с помощью сервера приложений после вставки XSLT-фрагмента.

Предварительный просмотр страниц для преобразования на стороне клиента

В случае преобразования на стороне клиента содержимое, которое в конечном счете видит посетитель, преобразуется браузером. Для этого надо добавить ссылку из XML-файла на XSLT-страницу. Если XML-файл открыт в Dreamweaver и его предварительный просмотр производится в браузере, то браузер загружает XML-файл и выполняет преобразование. Это дает тот же эффект, как при посещении сайта.

Однако такой подход осложняет отладку страницы, поскольку преобразование XML-данных и формирование кода HTML выполняется внутри браузера. Если для отладки HTML-кода выбрать команду браузера «Просмотреть исходный код», то вы увидите только полученный браузером исходный текст XML, а не полный текст HTML (теги, стили и т. п.), отвечающий за визуализацию страницы. Чтобы при просмотре исходного кода просмотреть полный текст HTML, необходимо просмотреть XSLT-страницу в браузере.

Предварительный просмотр целых XSLT-страниц и XSLT-фрагментов

При создании целых XSLT-страниц и XSLT-фрагментов рекомендуется предварительно просмотреть работу, чтобы проверить правильность отображения. Если пункт меню «Просмотреть в браузере» используется для отображения целой XSLT-страницы или XSLT-фрагмента, то Dreamweaver выполняет преобразование с помощью встроенного алгоритма. Это быстрый метод, упрощающий постепенное построение и отладку страницы. Кроме того, он позволяет просматривать весь HTML-код (теги, стили и т. п.) с помощью параметра браузера «Просмотреть исходный код».

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

Справки по другим продуктам

На посты, размещаемые в Twitter™ и Facebook, условия Creative Commons не распространяются.

1913 Exchanging and Transforming Data Using XML and XSLT
(Обмен и преобразование данных с использованием XML и XSLT)

Краткая аннотация: Этот курс является естественным продолжением курса 1905 и дает более детальную информацию по XML и XSLT для построения и интеграции систем, использующих эти технологии.
Предварительный уровень подготовки:
  • знания в объеме курса 1905 Building XML-Based Web Applications
Аудитория: Курс ориентирован на разработчиков, распределенных и E-Business систем, использующих XML.
Продолжительность: 5 дней

Программа курса:

  1. Обзор XML и XSLT
  2. Выбор и навигация с использованием Xpath
  3. Введение в XSLT
  4. Переопределение и комбинирование стилей
  5. Программирование c XSLT
  6. Определение XML грамматики и типов данных
  7. Создание и изменение XML структуры c XSLT
  8. Кросс-ссылочные документы при использовании XSLT
  9. Манипуляции XML документами при использовании SAX
  10. Northwind Traders Web-сайт

За дополнительной информацией обращайтесь в Interface Ltd.

Использование XSLT в качестве предварительного процессора XML

Это первый раз, когда я делаю что-нибудь с XSLT или XML, поэтому, пожалуйста, извините меня. Я нашел, что веб-документация XSLT действительно краткая.

У меня есть XML файл, который я хочу обработать, чтобы выборочно удалять контент на основе набора входных данных. Поведение должно быть похоже на простой обработчик ifdef, обработанный предварительным процессором.

Я разработал, как это сделать, как показано ниже, но некоторые части, такие как переменная «содержимое», не выглядели как лучший способ справиться с этим.

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

Каков наилучший способ предварительной обработки XML без преобразования?

Я разработал, как это сделать, как показано ниже, но некоторые части, такие как переменная «содержимое», не выглядели как лучший способ справиться с этим.

Ну, в принципе, вы поняли это правильно. Вы все же можете немного улучшить его, но:

изменяет контекст node. Внутри него . ссылается на node, который повторяется, а не тот, который был сопоставлен .

Это означает, что вы должны предусмотреть «внешний» контекст в переменной, это стандартная практика.

Вы отлично справляетесь с тем, кто только начинает с XSLT и XML.

Это не ответ на ваш вопрос, но я просто хотел сказать, что это может быть более безопасный шаблон «копировать по умолчанию»:

Работает по благодати определенного встроенного шаблона по умолчанию. Но вы можете получить странное поведение в отношении текстовых узлов (или других вещей, которые не являются элементами), когда вы добавляете больше шаблонов, поскольку значение по умолчанию имеет низкий приоритет.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL