
- •Лекция 4-08
- •5.3.9. Создание текстовых узлов вXslt
- •5.3.9.1. Элементxsl:text
- •5.3.9.2. Элементxsl:value-of
- •5.3.9.3. Встроенные правила шаблона
- •1. Поздравление
- •2. Напоминание
- •5.3.9.4. Обработка пробельных символов
- •5.3.10. Создание узлов документа, комментариев, инструкций по обработке и пространства имен вXslt
- •5.3.10.1. Элемент xsl:document
- •5.3.10.2. Элементxsl:result-document
- •5.3.10.3. Элементxsl:comment
- •5.3.10.4. Элемент xsl:processing-instruction
- •5.3.10.5. Элементxsl:namespace
- •5.3.11. Копирование узлов вXslt
- •5.3.11.1. Элементxsl:copy
- •5.3.11.2. Элементxsl:copy-of
- •5.3.11.3. Элементxsl:sequence
- •5.3.12. Условная и циклическая обработка вXslt
- •5.3.12.1. Элементxsl:if
- •5.3.12.2. Элементы xsl:choose, xsl:when и xsl:otherwise
- •5.3.12.3. Элементxsl:for-each
- •5.3.12.4. Сортировка вXslt
- •5.3.13. Сообщения процессораXslt
- •5.3.14. Псевдонимы пространства имен вXslt
- •5.3.15. Нумерация вXslt
- •3. Поздравление
- •1. Поздравление
- •1. Поздравление
- •01). Поздравление
- •0:00:00:00:01)Поздравление
- •5.3.16. Форматирование чисел в xslt
- •5.3.17. Использование ключей вXslt
- •5.3.18. Переменные, параметры и функции вXslt
- •5.3.18.1. Переменные в xslt
- •5.3.18.2. Вызов именованных правил шаблона
- •5.3.18.3. Параметры в xslt
- •5.3.18.4. Функции стилей в xslt
- •5.3.19. Дополнительные функции xslt
- •5.3.19.1. Функцияdocument()
- •5.3.19.2. Функцияcurrent()
- •5.3.19.3. Функцияgenerate-id()
- •5.3.19.4. Функция system-property()
- •5.3.19.5. Функцияunparsed-entity-uri()
- •5.3.20 Использование расширений вXslt
- •5.3.20.1. Средства расширенияXslt
- •5.3.20.2. Инициатива exslt
- •5.3.20.3. Средства расширения в процессореMsxml
- •5.3.20.4. Средства расширения в процессореSaxon
5.3.19.4. Функция system-property()
Функция system-property()возвращает значение свойства, которое определяется ее строковым параметром, и имеет следующее описание:
объектsystem-property(строка).
Аргумент этой функции должен представлять расширенное имя системного свойства. Если процессор не поддерживает свойство с таким именем, функция должна вернуть пустую строку.
Эта функция предназначена для получения информации об окружении, в котором производится преобразование. В спецификации XSLTуказано, что все процессоры в обязательном порядке должны поддерживать следующие системные свойства:
xsl:version– это свойство должно возвращать номер версии языкаXSLT, которую поддерживает данный процессор;
xsl:vendor– это свойство должно возвращать текстовую информацию о производителе используемого процессора;
xsl:vendor-url– это свойство должно возвращатьURLпроизводителя (как правило, это адрес Web-сайта производителя процессора).
Пример использования функции system-property():
Следующее преобразование копирует содержимое документа message.xmlв выходной файл и добавляет комментарий, содержащий значения системных свойств для выполненного преобразования:
<?xml version="1.0" encoding="Windows-1251"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"
encoding="Windows-1251" indent="yes"/>
<xsl:template match="/">
<xsl:comment>
<xsl:text> XSLT Version: </xsl:text>
<xsl:value-of
select="format-number(
system-property('xsl:version'),'0.0')"/>
<xsl:text> XSLT Processor: </xsl:text>
<xsl:value-of
select="system-property('xsl:vendor')"/>
<xsl:text> URL: </xsl:text>
<xsl:value-of
select="system-property('xsl:vendor-url')"/>
<xsl:text> </xsl:text>
</xsl:comment>
<xsl:text> </xsl:text>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>.
Для процессора MSXMLкомментарий будет иметь следующий вид:
<!--
XSLT Version: 1.0
XSLT Processor: Microsoft
URL: http://www.microsoft.com
-->,
а для процессора Saxon:
<!--
XSLT Version: 1.0
XSLT Processor: SAXON 6.5.2 from Michael Kay
URL: http://saxon.sf.net/
-->.
5.3.19.5. Функцияunparsed-entity-uri()
Функция unparsed-entity-uri()возвращает уникальный идентификатор ресурса, который соответствует неанализируемой внешней сущности и имеет следующее описание:
строка unparsed-entity-uri(строка).
В качестве аргумента функции задается имя неанализируемой внешней сущности.
Пример использования функции unparsed-entity-uri():
Следующее преобразование XSLTдляmessage.xml:
<?xml version="1.0" encoding="Windows-1251"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"
encoding="Windows-1251" indent="yes"/>
<xsl:template match="/">
<html>
<head>
<title>Вывод сообщений с изображениями</title>
</head>
<body>
<xsl:apply-templates select="message"/>
<hr />
</body>
</html>
</xsl:template>
<xsl:template match="header">
<hr />
<xsl:text>Сообщение </xsl:text>
<xsl:number count="header"/>
<xsl:text>. </xsl:text>
<xsl:apply-templates select="from"/>
<xsl:apply-templates select="to"/>
<xsl:apply-templates select="subject"/>
</xsl:template>
<xsl:template match="from">
<p>От:
<xsl:value-of select="@address"/>
</p>
</xsl:template>
<xsl:template match="to">
<p>Кому:
<xsl:value-of select="@address"/>
</p>
</xsl:template>
<xsl:template match="subject">
<p>Тема:
<xsl:value-of select="."/>
</p>
</xsl:template>
<xsl:template match="body">
<p>Текст:
<xsl:value-of select="."/>
</p>
<xsl:variable name="img"
select="preceding-sibling::header[1]/from/@image"/>
<xsl:for-each
select="preceding-sibling::header[1]/from/@*">
<xsl:if test="name() = 'image'">
<table border="3"><tr><td>
<xsl:element name="img">
<xsl:attribute name="src">
<xsl:value-of
select="unparsed-entity-uri($img)"/>
</xsl:attribute>
</xsl:element>
</td></tr></table>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
создаст следующий документ HTML:
<html>
<head>
<META http-equiv="Content-Type"
content="text/html; charset=Windows-1251">
<title>Вывод списка сообщений с изображениями</title>
</head>
<body>
<hr>Сообщение 1. <p>От: ivanov@mail.com</p>
<p>Кому: petrov@mail.com</p>
<p>Тема: Поздравление</p>
<p>Текст: Поздравляю с днем рождения!</p>
<table border="3"><tr><td>
<img src="file:///d:/images/greeting.gif">
</td></tr></table>
<hr>Сообщение 2. <p>От: ivanov@mail.com</p>
<p>Кому: sidorov@mail.com</p>
<p>Тема: Напоминание</p>
<p>Текст: Встречаемся в 10.00.</p>
<hr>
<body>
</html>.