Kniga-Online.club

Алексей Валиков - Технология XSLT

Читать бесплатно Алексей Валиков - Технология XSLT. Жанр: Программирование издательство -, год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:

   <xsl:apply-templates select="@*|node()"/>

  </xsl:copy>

 </xsl:template>

 <xsl:template match="item">

  <xsl:copy>

   <xsl:attribute name="id">

    <xsl:text><xsl:value-of select="generate-id()"/><xsl:text>

   </xsl:attribute>

   <xsl:apply-templates select="@*|node()"/>

  </xsl:copy>

 </xsl:template>

</xsl:stylesheet>

В выходящем документе элементы item будут иметь уникальные идентификаторы.

Листинг 8.71. Выходящий документ

<?xml version="1.0" encoding="utf-8"?>

<items>

 <item id="b1b1b2" source="a" name="A"/>

 <item id="b1b1b4" source="b" name="B"/>

 ...

 <item id="b1b1c34" source="a" name="F"/>

</items>

Сразу оговоримся, что этот способ будет работать не всегда: generate-id создает идентификатор, который является уникальным среди всех остальных идентификаторов узлов, а не среди всех значений уникальных атрибутов документа. Так что если бы какой-либо элемент имел ID-атрибут со значением b1b1b4, выходящий документ перестал бы быть правильным. Однако же, если в документе до преобразования вообще не было уникальных атрибутов, все будет в порядке.

Функция system-property

Синтаксис этой функции приведен ниже:

object system-property(string)

Функция system-property возвращает значение свойства, которое определяется ее строковым параметром. Аргумент этой функции должен представлять расширенное имя системного свойства. Если процессор не поддерживает свойство с таким именем, функция должна вернуть пустую строку.

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

□ xsl:version — это свойство должно возвращать номер версии языка XSLT, которую поддерживает данный процессор.

□ xsl:vendor — это свойство должно возвращать текстовую информацию о производителе используемого процессора.

□ xsl:vendor-uri — это свойство должно возвращать URL производителя — как правило, xsl:vendor-uri — это адрес Web-сайта производителя процессора.

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

Пример

В качестве примера приведем небольшой шаблон, выводящий в виде комментария информацию о процессоре.

Листинг 8.72. Шаблон, выводящий системную информацию

<xsl:template name="info">

 <xsl:comment>

  <xsl:text>&#xA; | XSLT Version: </xsl:text>

  <xsl:value-of

   select="format-number(system-property('xsl:version'), '0.0')"/>

  <xsl:text>&#xA; | XSLT Processor: </xsl:text>

  <xsl:value-of select="system-property('xsl:vendor')"/>

  <xsl:text>&#xA; | URL: </xsl:text>

  <xsl:value-of select="system-property('xsl:vendor-url')"/>

  <xsl:text>&#xA; +</xsl:text>

 </xsl:comment>

</xsl:template>

Процессор SAXON, написанный Майклом Кеем (Michael Kay), выводит следующий комментарий:

<!--

 | XSLT Version: 1.0

 | XSLT Processor: SAXON 6.0.2 from Michael Kay of ICL

 | URL: http://users.iclway.co.uk/mhkay/saxon/index.html

 +-->

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

Глава 9

Совместное использование XSLT с другими языками программирования

XSLT и другие языки

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

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

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

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

□ Использование XSLT-преобразований может коренным образом упростить создание Web-ориентированных приложений. Надо сказать, что во многих случаях XSLT-преобразования просто избавляют от необходимости программировать что-либо на других языках; однако даже тогда, когда без традиционных подходов не обойдешься, XSLT служит хорошую службу, обеспечивая простой, удобный и легко настраиваемый вывод фрагментов HTML.

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

Выполнение XSLT-преобразований в Object Pascal

В этой главе мы приведем пример использования XSLT-преобразований в простом проекте, созданном в среде разработки Delphi. Базовым языком Delphi является Object Pascal. Решение, которое мы предложим, будет основываться на использовании библиотеки MSXML Parser 3.0 от Microsoft.

Небольшое приложение, которое мы создадим, будет преобразовывать XML-документ (по умолчанию — "source.xml") при помощи XSLT-преобразования (по умолчанию — "stylesheet.xsl") и показывать результат преобразования.

Импорт MSXML в Delphi

Первым шагом после создания нового проекта (назовем его DelphiXML) будет импортирование библиотеки типов MSXML. Это позволит использовать в программе классы, интерфейсы и методы MSXML, в том числе и XSLT-процессор.

Для того чтобы импортировать библиотеку типов MSXML, выберем пункт меню Project/Import Type Library… (рис. 9.1).

Рис. 9.1. Импорт MSXML — шаг 1

В появившемся диалоге выберем пункт "Microsoft XML v3.0 (Version 3.0)" и создадим новый модуль кнопкой Create Unit (рис. 9.2).

Рис. 9.2. Импорт MSXML — шаг 2

Получившийся файл MSXML2_TLB.pas присоединим к проекту (Project/Add to Project…); теперь можно приступать к работе.

Для того чтобы использовать MSXML в нашем проекте, нам потребуется включить модуль MSXML2_TLB в список используемых модулей. Кроме того, для обработки исключений нам также потребуется модуль comobj. В итоге объявление uses будет выглядеть следующим образом:

uses

 Windows, Messages, SysUtils, Classes, Graphics, Controls,

 Forms, Dialogs, StdCtrls, ComCtrls, MSXML2_TLB, comobj;

Форма проекта

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

Приблизительный внешний вид формы показан на рис. 9.3.

Рис. 9.3. Внешний вид формы проекта

Использование DOMDocument

Объектная модель XML-документа в импортированной библиотеке будет представлена интерфейсом DOMDocument. В главном модуле проекта мы объявим две переменные, которые будут соответствовать обрабатываемому документу (xmlSource) и документу преобразования (xmlStylesheet):

var

 xmlSource: DOMDocument;

 xmlStylesheet: DOMDocument;

Для того чтобы создать экземпляры объектов наших документов, мы воспользуемся классом СoDOMDocument, который был создан в модуле MSXML2_TLB при импортировании. Метод Create этого класса создаст объекты, к методам и свойствам которых мы будем обращаться посредством уже упомянутого интерфейса DOMDocument:

xmlSource := CoDOMDocument.Create;

xmlStylesheet := CoDOMDocument.Create;

Для того чтобы загрузить XML-файл, мы воспользуемся функцией load интерфейса DOMDocument:

Перейти на страницу:

Алексей Валиков читать все книги автора по порядку

Алексей Валиков - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


Технология XSLT отзывы

Отзывы читателей о книге Технология XSLT, автор: Алексей Валиков. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*