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

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.
Жалоба
Напишите нам, и мы в срочном порядке примем меры.
Описание книги "Технология XSLT"
Описание и краткое содержание "Технология XSLT" читать бесплатно онлайн.
Книга посвящена разработке приложений для преобразования XML-документов с использованием XSLT — расширяемого языка стилей для преобразований. Обсуждается применение языков XSLT и XPath в решении практических задач: выводу документов в формате HTML, использованию различных кодировок для интернационализации и, в частности, русификации приложений, вопросам эффективности существующих подходов для решения проблем преобразования. Для иллюстрации материала используется большое количество примеров.
Для начинающих и профессиональных программистов
□ Если второй численный аргумент меньше 1 (это относится и к отрицательной бесконечности), то подстрока будет пустой.
□ Если второй численный аргумент, сложенный с первым, больше длины строки плюс один, подстрока будет продолжаться до конца строки.
Примерыsubstring('123456', 2, 3) → '234'
substring('123456', 2, 5) → '23456'
substring('123456', 2, 6) → '23456'
substring('123456', 2) → '23456'
substring('123456', -4) → '123456'
substring('123456', 5, 5) → '5'
substring('123456', 5) → '56'
substring ('123456', 6) → '6'
substring('123456', 1 div 0, ) → ''
substring('123456', 2, -1) → ''
Функция string-length
number string-length(string?)
Функция string-length возвращает число символов строкового аргумента. Если аргумент опущен, string-length возвращает длину строкового представления контекстного узла.
Напомним, что длина строки не имеет ничего общего с количеством байт, которое требуется для ее представления. Разные формы кодирования используют разное количество байт для записи символов, внутренние представления строк также могут быть различными, но длина строки в любом случае — это число символов, которые ее составляют.
Примерыstring-length('Barnes and Noble') →16
string-length('Barness#x20;& Noble') → 14
Функция normalize-space
string normalize-space(string?)
Функция normalize-space производит со своим строковым аргументом так называемую нормализацию пробельного пространства. Это означает, что в строке удаляются ведущие и заключающие пробельные символы, а все последовательности пробелов заменяются одним пробельным символом. Иными словами, функция удаляет "лишние" пробелы в строке.
Если аргумент функции опущен, она выполняется со строковым значением контекстного узла.
Примерыnormalize-space(' А - В - С ') → 'А-В-С'
normalize-space('А &#х9; В &#х9; С') > 'A B C'
Функция translate
string translate(string, string, string)
Функция translate производит замену символов первого своего строкового аргумента, которые присутствуют во втором аргументе на соответствующие символы третьего аргумента.
Примерtranslate('abcdefgh', 'aceg', 'ACEG') → 'AbCdEfGh'
Если некоторый символ повторяется во втором аргументе несколько раз, учитывается только первое его появление.
Примерtranslate('abcdefgh', 'acaeaga', 'ACBECGD') → 'AbCdEfGh'
Если второй аргумент длиннее третьего, символы, для которых нет соответствующей замены, удаляются из строки.
Примерtranslate('a b-c=d+e|f/g\h', 'aceg-=+|/\', 'ACEG') → 'AbCdEfGh'
Если третий аргумент длиннее второго, остаток строки игнорируется.
Примерtranslate('abcdefgh', 'aceg', 'ACEGBDFH') → ' AbCdEfGh'
Функцию translate можно использовать, например, для изменения регистра символов. Конечно, это будет работать только для тех языков, для которых такая функция будет записана, но и этого в большинстве случаев будет достаточно. В будущем предполагается включить в новые версии языка более мощные функции для работы с регистрами символов.
ПримерДля того чтобы изменять регистр слов русского языка, мы можем определить две переменные, lowercase и uppercase, которые будут содержать строчные и прописные символы основного русского алфавита (мы включили в него букву ё — строчную ("ё") и прописную ("Ё"), хотя в соответствии с Unicode она относится к расширениям). Мы также создадим два именованных шаблона, которые будут менять регистр символов строкового параметра str. Для удобства использования мы вынесем определения переменных и шаблонов во внешний модуль ru.xsl.
Листинг 6.6. Преобразование ru.xsl<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable
name="uppercase"
select="concat('АБВГ',
'ДЕЁЖЗ',
'ИЙКЛ',
'МНОП',
'РСТУ',
'ФХЦЧ',
'ШЩЪЫ',
'ЬЭЮЯ')"/>
<xsl:variable
name="lowercase"
select="concat('абвг',
'деёжЗ',
'ийкл',
'мноп',
'рсту',
'фхцч',
'шщъы',
'ьэюя')"/>
<xsl:template name="lower">
<xsl:param name="str"/>
<xsl:value-of select="translate($str, $uppercase, $lowercase)"/>
</xsl:template>
<xsl:template name="upper">
<xsl:param name="str"/>
<xsl:value-of select="translate($str, $lowercase, $uppercase)"/>
</xsl:template>
</xsl:stylesheet>
Использовать этот модуль можно, включив или импортировав его в основное преобразование элементами xsl:include или xsl:import. После этого в основном преобразовании будут доступны переменные lowercase и uppercase, которые можно будет использовать в функции translate и шаблоны с именами lower и upper.
Использовать функцию translate с переменными lowercase и uppercase можно следующим образом:
translate('Дом', $uppercase, $lowercase) → 'дом'
translate('Дом', $lowercase, $uppercase) → 'ДОМ'
Именованные шаблоны можно вызывать элементом xsl:call-template, передавая параметр при помощи xsl:with-param. Например, следующий фрагмент шаблона
...
<xsl:call-template name="lower">
<xsl:with-param name="str" select="'Дом'"/>
</xsl:call-template>
...
создаст в выходящем дереве текстовый узел со значением "дом".
Функции множеств узлов
Функции last и position
number last()
number position()
Функция last возвращает текущий размер контекста — число, которое показывает, сколько узлов находится в обрабатываемом в данный момент множестве.
Функция position возвращает позицию контекста — число, показывающее порядковый номер контекстного узла в обрабатываемом множестве.
ПримерВ этом примере мы будем заменять все элементы элементами вида
<element name="..." position="...">
...
</element>
где атрибут name будет содержать имя, a position — через дробь позицию элемента в контексте и размер контекста.
Листинг 6.7. Входящий документ<а>
<b/>
<c/>
<d>
<e/>
<f/>
</d>
</a>
Листинг 6.8. Преобразование<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="*">
<element name="{name()}" pos="{position()}/{last()}">
<xsl:apply-templates/>
</element>
</xsl:template>
</xsl:stylesheet>
Листинг 6.9. Выходящий документ<element name="a" pos="1/1">
<element name="b" pos="1/3"/>
<element name="c" pos="2/3"/>
<element name="d" pos="3/3">
<element name="e" pos="1/2"/>
<element name="f" pos="2/2"/>
</element>
</element>
Отметим, что если бы мы не удаляли лишние пробельные символы во входящем документе при помощи элемента xsl:strip-space, в контексте преобразования учитывались бы также и текстовые узлы, которые им соответствуют. Выходящий документ без этого элемента имел бы следующий вид:
<element name="a" pos="1/1">
<element name="b" pos="2/7"/>
<element name="c" pos="4/7"/>
<element name="d" pos="6/7">
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!
Похожие книги на "Технология XSLT"
Книги похожие на "Технология XSLT" читать онлайн или скачать бесплатно полные версии.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Отзывы о "Алексей Валиков - Технология XSLT"
Отзывы читателей о книге "Технология XSLT", комментарии и мнения людей о произведении.