Вход/Регистрация
Технология XSLT
вернуться

Валиков Алексей Н.

Шрифт:

Мы упомянули, что значением параметра может быть дерево. Попробуем пояснить эту концепцию на примере генерации HTML-документа.

Итак, предположим, что мы генерируем выходящий документ следующим именованным шаблоном:

<xsl:template name="html">

 <xsl:param name="head">

<head>

<title>Title one</title>

</head>

 </xsl:param>

 <html>

<xsl:copy-of select="$head"/>

<body>

<xsl:text>content</xsl:text>

</body>

</html>

 </xsl:template>

Параметр

head
по умолчанию будет содержать дерево, состоящее из элемента
head
и его дочернего элемента
title
, который содержит текст "
Title one
". Результат выполнения вызова

<xsl:call-template name="html"/>

мы можем видеть на следующем листинге:

<html>

 <head>

<title>Title one</title>

 </head>

 <body>content</body>

</html>

Выделенный фрагмент относится к части дерева, которая была создана копированием значения параметра

head
.

Попробуем теперь передать в качестве параметра дерево, сгенерированное следующим шаблоном:

<xsl:template name="head">

 <head>

<title>Title two</title>

<style type="text/css">

H1 {border-width: 1; border: solid; text-align: center}

</style>

 </head>

</xsl:template>

Для того чтобы передать результат выполнения этого шаблона в виде значения параметра

head
именованному шаблону
head
, воспользуемся следующей конструкцией:

<xsl:call-template name="html">

 <xsl:with-param name="head">

<xsl:call-template name="head"/>

 </xsl:with-param>

</xsl:call-template>

Выходящий документ будет получен в виде:

<html>

 <head>

<title>Title two</title>

<style type="text/css">

H1 {border-width: 1; border: solid; text-align: center}

</style>

 </head>

 <body>content</body>

</html>

Выделенный фрагмент, как и в предыдущем случае, соответствует части документа, полученной при копировании значения параметра

head
.

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

Глава 6

XPath-выражения

Выражения для XML-документов

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

value
элемента
price
, принадлежащему элементу
product
, сделать это при помощи стандартных SAX- или DOM-интерфейсов было бы, мягко говоря, не очень удобно. И это еще простой пример. Бывают, действительно, сложные случаи, когда нужно выбрать узел определенного типа, который может находиться в нескольких местах в документе, да еще и должен обладать заданными свойствами.

Для выполнения часто встречающихся задач такого рода был создан язык XPath, название которого расшифровывается, как XML Path — язык XML- путей. Главной задачей этого языка является адресация, или, по-другому, определение местоположения частей XML-документа. На практике это означает выбор в документе множества узлов, которые соответствуют определенным условиям расположения.

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

  • Читать дальше
  • 1
  • ...
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: