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

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

Шрифт:

Другие дополнительные функции XSLT

Функция current

Выражение для этой функции имеет вид:

node-set current

Функция

current
возвращает множество, состоящее из текущего узла преобразования.

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

Представим себе, что нам нужно выбрать элементы

item
со значением атрибута
source
, равным значению этого атрибута текущего узла. Очевидно, путь выборки будет выглядеть как
item[предикат]
, где предикат определяет условие равенства атрибутов текущего и выбираемого. Но как записать это условие? Предикат будет вычисляться в контексте проверяемого элемента
item
, значит, все относительные пути выборки типа
@source
или
./@source
или
self::item/@source
будут отсчитываться именно от проверяемого элемента. В этом случае узел контекста и текущий узел преобразования — не одно и то же.

Для того чтобы обратиться в предикате именно к текущему узлу, следует использовать функцию

current
:

item[@source=current/@source]

Это выражение выберет все дочерние элементы

item
текущего узла, значение атрибута
source
которых будет таким же, как и у него.

Функция unparsed-entity-uri

Выражение для этой функции следующее:

string unparsed-entity-uri(string)

Функция

unparsed-entity-uri
возвращает уникальный идентификатор ресурса, который соответствует неразбираемой внешней сущности, имя которой передано как аргумент.

Пример

Описывая синтаксис XML, мы приводили пример документа, который использовал неразбираемые внешние сущности.

Листинг 8.67. Входящий документ использующий неразбираемые внешние сущности

<!DOCTYPE menu [

 <!ELEMENT menu (menuitem*)>

 <!ELEMENT menuitem EMPTY>

 <!ATTLIST menuitem

image ENTITY #REQUIRED

title CDATA #REQUIRED

href CDATA #REQUIRED>

 <!NOTATION gif SYSTEM "gif-viewer.exe">

 <!NOTATION jpg SYSTEM "jpg-viewer.exe">

 <!ENTITY news SYSTEM "news.gif" NDATA gif>

 <!ENTITY products SYSTEM "prod.jpg" NDATA jpg>

 <!ENTITY support SYSTEM "support.gif" NDATA gif>

]>

<menu>

 <menuitem image="news" title="News" href="#"/>

 <menuitem image="products" title="Products" href="#"/>

 <menuitem image="support" title="Support" href="#"/>

</menu>

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

unparsed- entity-uri
. Аргументом этой функции в данном случае будет значение атрибута
image
, ведь именно этот атрибут задает имя неразбираемой сущности, которая соответствует изображению пункта меню. Преобразование такого документа в HTML будет иметь приблизительно следующий вид.

Листинг 8.68. Преобразование, использующее функцию unparsed-entity-uri

<xsl:stylesheet

 version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:output

method="html"

indent="yes"/>

 <xsl:template match="menu">

<table>

<xsl:apply-templates select="menuitem"/>

</table>

 </xsl:template>

 <xsl:template match="menuitem">

<tr>

<td>

<A alt="{@title}" href="#">

<img src="{unparsed-entity-uri(@image)}"/>

</A>

</td>

</tr>

 </xsl:template>

  • Читать дальше
  • 1
  • ...
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • ...

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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