Книга: Технология XSLT
Перечисление узлов
Разделы на этой странице:
Перечисление узлов
Функции name
и local-name
предоставляют возможности для работы с документом, имена элементов и атрибутов в котором заранее неизвестны. Например, если шаблон определен как:
<xsl:template match="*[starts-with(local-name(), 'чеб')]">
...
</xsl:template>
то обрабатываться им будут все элементы, локальные части имен которых начинаются на "чеб"
(например, "чебуреки"
, "Чебоксары"
, "чебурашка"
).
Следующее преобразование демонстрирует, как при помощи функции local-name
и ключей сосчитать количество элементов и атрибутов документа с различными именами.
Листинг 11.4. Входящий документ
<foo bar="1">
<bar foo="2"/>
<bar bar="3"/>
<foo foo="4">
<bar bar="5"/>
<bar foo="6"/>
</foo>
</foo>
Листинг 11.5. Преобразование
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Выводим информацию в текстовом виде -->
<xsl:output method="text"/>
<!--
| Создаем ключ, отображающий узлы атрибутов и элементов
| в их локальные части имен.
+-->
<xsl:key name="node" match="*" use="local-name()"/>
<xsl:key name="node" match="@*" use="local-name()"/>
<xsl:template match="*|@*">
<xsl:variable name="name" select="local-name()"/>
<!--
| Если узел является первым узлом группы (первым встретившимся
| узлом документа с данным именем), выводим информацию о
| количестве узлов в группе (количество узлов с таким же именем).
+-->
<xsl:if test="generate-id(.) = generate-id(key('node', $name))">
<xsl:text>Node '</xsl:text>
<xsl:value-of select="local-name()"/>
<xsl:text>' found </xsl:text>
<xsl:value-of select="count(key('node', $name))"/>
<xsl:text> times.
</xsl:text>
</xsl:if>
<!-- Рекурсивно обрабатываем дочерний элемент и атрибуты -->
<xsl:apply-templates select="*|@*"/>
</xsl:template>
</xsl:stylesheet>
Листинг 11.6. Выходящий документ
Node 'foo' found 5 times.
Node 'bar' found 7 times.
- Операции с множествами узлов
- Функции множеств узлов
- Удаление шаблонов узлов STP
- Создание узлов
- Управление объединением содержимого узлов
- Предикаты: наборы узлов
- 1.2.5. Диаграммы дерева узлов и FEO
- Пример: перечисление семейств шрифтов
- Описание узлов с помощью MAC-адресов
- Поддержка защищенных Web-узлов
- Создание узлов элементов
- Сводная таблица характеристик узлов