Нумерация на произвольных уровнях
Нумерация на произвольных уровнях
Иногда может потребоваться просто подсчитать узлы определенного типа независимо от их уровня в документе. Например, в различных местах иерархии документа не исключено наличие нескольких элементов <NAME>, и вам может быть нужно просто трактовать документ как поток данных, подсчитывая встречающиеся элементы <NAME>.
Вот как примерно это будет выглядеть, если в planets.xml элементы <NAME> встречаются на различных уровнях:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xml" href="planets.xsl"?>
<PLANETS>
<TITLE>
<NAME>Planets Table</NAME>
</TITLE>
<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><!--B перигелии-->
</PLANET>
<PLANET>
<NAME>Venus</NAME>
<MASS UNITS="(Earth = 1)">.815</MASS>
<DAY UNITS="days">116.75</DAY>
<RADIUS UNITS="miles">3716</RADIUS>
<DENSITY UNITS="(Earth = 1)">.943</DENSITY>
<DISTANCE UNITS="million miles">66.8</DISTANCE><!--В перигелии-->
</PLANET>
.
.
.
Чтобы сосчитать общее число элементов <NAME>, в таблице стилей можно установить атрибут level в «any» (листинг 5.12).
Листинг 5.12. Нумерация на произвольных уровнях
<?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>
<xsl:apply-templates select="TITLE"/>
<TABLE BORDER="2">
<TR>
<TD>Name</TD>
<TD>Mass</TD>
<TD>Radius</TD>
<TD>Day</TD>
</TR>
<xsl:apply-templates select="PLANET"/>
</TABLE>
</BODY>
</HTML>
</xsl:template>
<xsl:template match="PLANET">
<TR>
<TD><xsl:apply-templates select="NAME"/></TD>
<TD><xsl:apply-templates select="MASS"/></TD>
<TD><xsl:apply-templates select="RADIUS"/></TD>
<TD><xsl:apply-templates select="DAY"/></TD>
</TR>
</xsl:template>
<xsl:template match="TITLE">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="NAME">
<xsl:number level="any" count="NAME"/>. <xsl:value-of select="."/>
</xsl:template>
<xsl:template match="MASS">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
<xsl:value-of select="@UNITS"/>
</xsl:template>
.
.
.
<xsl:template match="DAY">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
<xsl:value-of select="@UNITS"/>
</xsl:template>
</xsl:stylesheet>
Получаем результат (заметьте, что текст каждого элемента <NAME>, независимо от его уровня в документе, пронумерован):
<HTML>
<HEAD>
<TITLE>
The Planets Table
</TITLE>
</HEAD>
<BODY>
<H1>
The Planets Table
</H1>
1. Planets Table
<TABLE BORDER="2">
<TR>
<TD>Name</TD>
<TD>Mass</TD>
<TD>Radius</TD>
<TD>Day</TD>
</TR>
<TR>
<TD>2. Mercury</TD>
<TD>.0553 (Earth = 1)</TD>
<TD>1516 miles</TD>
<TD>58.65 days</TD>
</TR>
<TR>
<TD>3. Venus</TD>
<TD>.815 (Earth = 1)</TD>
<TD>3716 miles</TD>
<TD>116.75 days</TD>
</TR>
<TR>
<TD>4. Earth</TD>
<TD>1 (Earth = 1)</TD>
<TD>2107 miles</TD>
<TD>1 days</TD>
</TR>
</TABLE>
</BODY>
</HTML>
При помощи атрибута from можно указать, с какого узла-предка начинать отсчет; например, если установить узел-предок в элемент <PLANET> так:
<xsl:number level="any" count="NAME" from="PLANET"/>
то процессор XSLT осуществит обратный просмотр только до первого предка <PLANET> и начнет нумерацию с этой точки документа.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
23.1. Универсализация произвольных строк
23.1. Универсализация произвольных строк В главе 14 мы говорили о том, как с помощью функции glob() производится универсализация имен файлов, однако пользователи, знакомые с возможностями универсализации, нередко пытаются применить их и к другим разновидностям строк. Функция
Сбор произвольных данных через ds_raw
Сбор произвольных данных через ds_raw Начиная с версии NeTAMS 3.4.0 (build 3018) появилась возможность учета произвольных данных с использованием сервисаservice data–source 3type rawКоманда:rawdata unit name XXX policy YYY in AAA out BBB {as–is|incremental} [time]Где XXX и YYY — имена юнита и политикиAAA и BBB — значения в байтах,
9.5.1. Нумерация
9.5.1. Нумерация Сначала приведем дополнительные сведения о нумерации жестких дисков в системе Linux (табл. 9.3).Таблица 9.3. Нумерация жестких дисков Тип жесткого диска Старший номер Наименование устройства Младший номер Диск 1 Диск 2 IDE на 1 контроллере 22 /dev/hda и /dev/hdb 0 … 63 64 …
10.3.1 Нумерация и подтверждение
10.3.1 Нумерация и подтверждение Для обеспечения надежной пересылки данных в TCP используются нумерация (numbering) и подтверждение (acknowledgment — ACK). Схема нумерации TCP несколько необычна: каждый пересылаемый по соединению октет рассматривается как имеющий порядковый номер.
18. Сетевые подключения на аппаратном и программном уровнях
18. Сетевые подключения на аппаратном и программном уровнях Создание сетевого подключения на аппаратном и программном уровнях – один из сложнейших этапов работы с любой операционной системой. В Windows XP предусмотрено несколько разных типов сетевых подключений, и каждый
Нумерация страниц
Нумерация страниц Если документ состоит более чем из двух страниц, перед распечаткой желательно пронумеровать страницы. Таким образом в нем будет гораздо легче ориентироваться. Для некоторых типов документов, например научных работ, нумерация является
Нумерация строк
Нумерация строк При работе с документами определенного типа (например, с юридическими договорами) иногда бывает необходимо нумеровать не только страницы, но и строки. В Microsoft Word есть возможность автоматической нумерации строк. Для этого сделайте следующее.1. Щелкните на
1.5.5. Гибкость на всех уровнях
1.5.5. Гибкость на всех уровнях Многие операционные системы, называемые более "современными" или более "дружественными по отношению к пользователю", чем Unix, достигают "внешней красоты" путем связывания пользователей и разработчиков одной интерфейсной политикой. В таких
1.5.5. Гибкость на всех уровнях
1.5.5. Гибкость на всех уровнях Многие операционные системы, называемые более "современными" или более "дружественными по отношению к пользователю", чем Unix, достигают "внешней красоты" путем связывания пользователей и разработчиков одной интерфейсной политикой. В таких
Нумерация
Нумерация Нумерация, несомненно, является одной из самых естественных проблем, решаемых при помощи XSLT. Задача нумерации состоит в том, чтобы, исходя из позиции обрабатываемого узла в дереве документа, вычислить по заданным критериям его порядковый номер. В качестве
Построение произвольных поверхностей
Построение произвольных поверхностей ArchiCAD, являясь программой архитектурного проектирования, не ограничивается только инструментарием для построения зданий и сооружений. Проекты создаются не на пустом месте, и для выполнения архитектурного ансамбля требуется еще как
Нумерация страниц
Нумерация страниц Текстовый редактор Microsoft Word обладает гибкими инструментами нумерации страниц. С их помощью можно автоматически присваивать номера страницам документа, размещать их в любом месте страницы. При этом возможно использование различных форматов
Движения произвольных фигур
Движения произвольных фигур Чтобы понять необходимость в отложенных процедурах и классах, снова рассмотрим иерархию фигур FIGURE. Рис. 14.8. Снова иерархия FIGUREНаиболее общим понятием здесь является FIGURE. Основываясь на механизмах полиморфизма и динамического связывания,
О (не)эффективном управлении, конфликте интересов на разных уровнях иерархии и Невидимой Ноге Дмитрий Шабанов
О (не)эффективном управлении, конфликте интересов на разных уровнях иерархии и Невидимой Ноге Дмитрий Шабанов Опубликовано 15 февраля 2013 Мы живем в сложном и плохо управляемом мире. Как повысить качество принимаемых решений? Мне кажется, что самый
Нумерация страниц
Нумерация страниц Для нумерации страниц вам нет необходимости вручную проставлять номера на каждой из них, поскольку Word справится с этой задачей намного эффективнее и избавит вас от множества проблем. Чтобы вставить номера страниц, выполните команду Вставка ?