Доступ к значениям узлов
Доступ к значениям узлов
Получить доступ к значению узла можно при помощи элемента <xsl:value-of>, у которого есть два возможных атрибута:
• select (обязательный). Выходное значение. Устанавливается в выражение;
• disable-output-escaping (необязательный). Указывает, что символы, такие как >, будут отправляться в выходной поток как есть, не изменяясь на >. Значения этого атрибута: yes или no.
Элемент <xsl:value-of> всегда пуст.
При помощи атрибута select можно указать, значение какого узла требуется получить. Например, вам может потребоваться значение узла <NAME> в каждом элементе <PLANET>, то есть текст, заключенный в этом узле. Это можно сделать следующим образом (листинг 2.4).
Листинг 2.4. Использование <xsl:value-of>
<?xml version="1.0">
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<HTML>
<xsl:apply-templates/>
</HTML>
</xsl:template>
<xsl:template match="PLANETS">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="PLANET">
<P>
<xsl:value-of select="NAME"/>
</P>
</xsl:template>
</xsl:stylesheet>
Значение узла, содержащего текст, будет просто текстом, поэтому результат применения этой таблицы стилей к planets.xml следующий:
<HTML>
<P>Mercury</P>
<P>Venus</P>
<P>Earth</P>
</НТМL>
АТРИБУТ DISABLE-OUTPUT-ESCAPING
Атрибут disable-output-escaping элемента <xsl:value-of> более подробно рассмотрен в главе 3.
Предположим, нам нужно осуществить нечто более сложное — например, преобразовать данные из planets.xml в HTML-таблицу в новом файле planets.html (рис. 2.1), как мы видели в главе 1. Теперь это можно сделать при помощи <xsl:value-of>.
Рис. 2.1. Planets.html в Internet Explorer
Здесь важно учесть один момент. В planets.xml формально не задан порядок элементов <MASS>, <RADIUS>, <DAY> и <DISTANCE>, однако важно, чтобы эти элементы обрабатывались в определенном порядке в соответствии с заголовками таблицы. Поэтому я буду использовать элементы <xsl:value-of> в том порядке, в котором они требуются в таблице HTML.
Таким образом, чтобы создать HTML-таблицу, изображенную на рис. 2.1, я сначала ищу элемент <PLANETS> и затем заменяю его на HTML для создания самой HTML-таблицы. Элемент <PLANETS> — дочерний элемент корневого узла, и поскольку на корневой узел можно сослаться через «/», на элемент <PLANETS> можно сослаться непосредственно через "/PLANETS", без необходимости предварительно применять шаблон для корневого узла. Это пример выражения XPath, большое число подобных мы также увидим в главе 4.
Ниже приведен пример того, как я начал создавать HTML-таблицу путем выбора элемента <PLANETS> непосредственно как "/PLANETS" — заметьте, что для применения шаблонов к любым дочерним узлам <PLANETS> я использовал <xsl:apply-templates>:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/PLANETS">
<HTML>
<HEAD>
<TITLE>
The Planets Table
</TITLE>
</HEAD>
<BODY>
<H1>
The Planets Table
</H1>
<TABLE BORDER="2">
<TR>
<TD>Name</TD>
<TD>Mass</TD>
<TD>Radius</TD>
<TD>Day</TD>
</TR>
<xsl:apply-templates/>
</TABLE>
</BODY>
</HTML>
</xsl:template>
.
.
.
Каждый дочерний узел <PLANET> имеет дочерние узлы <NAME>, <MASS>, <RADIUS> и <DAY>, и я хочу обрабатывать их именно в таком порядке — для того чтобы они добавлялись в HTML-таблицу в соответствии с заголовками таблицы. Для задания порядка их обработки я поместил элементы <xsl:value-of> (листинг 2.5).
Листинг 2.5. planets.xsl
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/PLANETS">
<HTML>
<HEAD>
<TITLE>
The Planets Table
</TITLE>
</HEAD>
<BODY>
<H1>
The Planets Table
</H1>
<TABLE BORDER="2">
<TR>
<TD>Name</TD>
<TD>Mass</TD>
<TD>Radius</TD>
<TD>Day</TD>
</TR>
<xsl:apply-templates/>
</TABLE>
</BODY>
</HTML>
</xsl:template>
<xsl:template match="PLANET">
<TR>
<TD><xsl:value-of select="NAME"/></TD>
<TD><xsl:value-of select="MASS"/></TD>
<TD><xsl:value-of select="RADIUS"/></TD>
<TD><xsl:value-of select="DAY"/></TD>
</TR>
</xsl:template>
</xsl:stylesheet>
Это все, что нам нужно; вот результат:
<HTML>
<HEAD>
<TITLE>
The Planets Table
</TITLE>
</HEAD>
<BODY>
<H1>
The Planets Table
</H1>
<TABLE BORDER="2">
<TR>
<TD>Name</TD>
<TD>Mass</TD>
<TD>Radius</TD>
<TD>Day</TD>
</TR>
<TR>
<TD>Mercury</TD>
<TD>.0553</TD>
<TD>1516</TD>
<TD>58.65</TD>
</TR>
<TR>
<TD>Venus</TD>
<TD>.815</TD>
<TD>3716</TD>
<TD>116.75</TD>
</TR>
<TR>
<TD>Earth</TD>
<TD>1</TD>
<TD>2107</TD>
<TD>1</TD>
</TR>
</TABLE>
</BODY>
</HTML>
Это практически то, что требовалось. Если взглянуть на рис. 2.2, видно, что в этом HTML-файле не выведены значения атрибута UNITS, который присутствует у каждого элемента (кроме атрибута <NAME>) в planets.xml:
Рис. 2.2. Planets.html без атрибутов в Internet Explorer
<?xml version="1.0"?>
<?xml-stylesheet type="text/xml" href="planets.xsl"?>
<PLANETS>
<PLANET>
<NAME>Mercury</NAME>
<MASS UNITS="(Earth = 1)">.0553</MASS>
<DAY UNITS="days">58.65</DAY>
<RADIUS UNITS="miles">1516</RADIUS>
<DENSITY UNITS="(Earth = 1)">.983</DENSITY>
<DISTANCE UNITS="million miles">43.4</DISTANCE><!--В перигелии-->
</PLANET>
.
.
.
В главе 3, в которой шаблоны рассмотрены более подробно, будет показано, как извлекать значения атрибутов из элементов XML.
Однако перед тем, как начать углубляться в работу с шаблонами, необходимо еще изучить достаточно много материала о таблицах стилей в общем. Например, в рабочий проект XSLT 1.1 включена поддержка рекомендации XML Base, а это значит, что она также появится и в XSLT 2.0.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Доступ к значениям узлов
Доступ к значениям узлов Получить доступ к значению узла можно при помощи элемента <xsl:value-of>, у которого есть два возможных атрибута:• select (обязательный). Выходное значение. Устанавливается в выражение;• disable-output-escaping (необязательный). Указывает, что символы, такие как
Поддержка защищенных Web-узлов
Поддержка защищенных Web-узлов При использовании сценариев часто осуществляется шифрование передаваемых данных. Действия по кодированию и декодированию информации при обмене между Web-сервером и Web-броузером определяется протоколом SSL (Secure Sockets Layer — уровень защищенного
Удаление шаблонов узлов STP
Удаление шаблонов узлов STP Если нужно удалить файлы STP из галереи шаблонов узлов, выполните следующее.Откройте узел SharePoint верхнего уровня, на который были загружены файлы STP. Если потребуется, введите имя пользователя и пароль и щелкнитеУбедитесь, что имеете достаточно
Использование диспетчера узлов
Использование диспетчера узлов Перед написанием класса связного списка нужно рассмотреть еще один вопрос. Мы начали с того, что объявили тип узла как запись (тип TSimpleNode), в которой хранятся (1) данные и (2) указатель на следующий узел списка. Второе поле записи удалить нельзя
Использование диспетчера узлов
Использование диспетчера узлов Как и для односвязного списка, данные в списке удобно хранить в виде указателей. Это позволяет написать общий класс двухсвязного списка. В двухсвязном списке в каждом узле будет находиться прямой указатель, обратный указатель и указатель
1.2.5. Диаграммы дерева узлов и FEO
1.2.5. Диаграммы дерева узлов и FEO Диаграмма дерева узлов показывает иерархию работ в модели и позволяет рассмотреть всю модель целиком, но не показывает взаимосвязи между работами (стрелки) (рис. 1.2.23). Процесс создания модели работ является итерационным, следовательно,
Множество узлов (node-set)
Множество узлов (node-set) Несмотря на то, что XSLT оперирует логической моделью XML-документа как деревом с узлами, в XSLT нет типа данных, который соответствовал бы одному узлу. Вместо этого используется гораздо более мощный и гибкий тип данных, называемый множеством узлов (англ.
Операции с множествами узлов
Операции с множествами узлов Три основные операции с множествами узлов, которые поддерживает язык XPath, — это фильтрация множества, выборка с использованием путей и
Функции множеств узлов
Функции множеств узлов Функции last и position number last()number position()Функция last возвращает текущий размер контекста — число, которое показывает, сколько узлов находится в обрабатываемом в данный момент множестве.Функция position возвращает позицию контекста — число, показывающее
Создание узлов элементов
Создание узлов элементов В четвертой главе мы уже разобрали один из способов создания в выходящем документе узлов элементов, а именно — использование литеральных элементов результата, которые в неизменном виде копируются процессором в выходящее дерево. Этот способ
Создание текстовых узлов
Создание текстовых узлов Шаблон преобразования может содержать текстовые узлы, которые при выполнении шаблона после обработки пробельных символов будут попросту скопированы в результирующее дерево. Таким образом, для того, чтобы вывести в выходящий документ некоторый
Копирование узлов
Копирование узлов Преобразование может включать в себя не только создание новых, но и копирование существующих узлов. Для этого можно использовать элементы xsl:copy и xsl:copy-of, использование которых будет подробно разобрано
20.2.4. Доступ к значениям
20.2.4. Доступ к значениям Команда getopts часто применяется для выполнения сценариев резервирования. Благодаря этому пользователь может указывать различные ленточные накопители, используемые для резервирования данных. Ниже приводится образец сценария, использующего