Книга: XSLT
Предикаты: наборы узлов
Предикаты: наборы узлов
Набор узлов (node set), как понятно из названия, представляет собой просто совокупность узлов (и может содержать только один узел). Выражение child::PLANET
возвращает набор узлов, состоящий из всех элементов <PLANET>
. Выражение child::PLANET/child::NAME
возвращает список узлов, состоящий из всех элементов <NAME>
, дочерних по отношению к элементам <PLANET>
. Для выбора узла или узлов из набора узлов воспользуйтесь следующими функциями для работы с наборами узлов в предикатах:
• last()
. Возвращает количество узлов в наборе узлов;
• position()
. Возвращает позицию контекстного узла в контекстном наборе узлов (начиная с 1);
• count(node-set)
. Возвращает количество узлов в наборе. Если опустить node-set
, функция будет применена к контекстному узлу;
• id(string ID)
. Возвращает набор узлов, содержащий элемент с ID, удовлетворяющим переданной функции строке, или пустой набор узлов, если такой элемент отсутствует. Можно перечислить несколько идентификаторов, разделенных символами-разделителями, — тогда функция вернет набор узлов, состоящий из элементов с этими идентификаторами;
• local-name(node-set)
. Возвращает локальное имя первого узла в наборе узлов. Если опустить node-set
, функция будет применена к контекстному узлу;
• namespace-uri(node-set)
. Возвращает URI пространства имен первого узла в наборе узлов. Если опустить node-set
, функция будет применена к контекстному узлу;
• name(node-set)
. Возвращает полностью определенное имя первого узла в наборе узлов. Если опустить node-set
, функция будет применена к контекстному узлу.
В листинге 4.6 я перенумеровал элементы в выходном документе при помощи функции position()
.
Листинг 4.6. Применение функции position
<?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
</TITLE>
</HEAD>
<BODY>
<xsl:apply-templates select="PLANET"/>
</BODY>
</HTML>
</xsl:template>
<xsl:template match="PLANET">
<P>
<xsl:value-of select="position()"/>
<xsl:text> </xsl:text>
<xsl:value-of select="NAME/>
</P>
</xsl:template>
</xsl:stylesheet>
Вот результат. Как видите, планеты перенумерованы:
<HTML>
<HEAD>
<TITLE>
The Planets
</TITLE>
</HEAD>
<BODY>
<P>
1. Mercury
</P>
<P>
2. Venus
</P>
<P>
3. Earth
</P>
</BODY>
</HTML>
Можно также применять функции для работы с наборами узлов в предикатах, как, например, PLANET[position()=last()]
, выбирающая последнего ребенка <PLANET>
контекстного узла
- Предикаты: фрагменты результирующего дерева
- Предикаты: числа
- Операции с множествами узлов
- Удаление шаблонов узлов STP
- Создание узлов
- Управление объединением содержимого узлов
- Другие предикаты сравнения
- Наборы символов Firebird
- 1.2.5. Диаграммы дерева узлов и FEO
- Наборы данных
- Предикаты
- Образцы шага, часть 3: предикаты