Книга: XSLT

Многоуровневая нумерация

Многоуровневая нумерация

Элемент <xsl:number> также поддерживает многоуровневую нумерацию — такую как 3.1.2.5 и т. п. Для работы с ней нужно установить атрибут level в «multiple». При помощи атрибута count можно указать, узлы какого типа вы хотите нумеровать, установив этот атрибут в образец, например: "PART|CHAPTER|PARAGRAPH". При обработке элементов <xsl:number> процессор XSLT нумерует узлы в соответствии с иерархией документа.

В примере я нумерую каждый уровень в иерархии элементов planets.xml, установив атрибут count в «*» для выбора всех элементов. Можно также указать формат нумерации при помощи атрибута format. При многоуровневой нумерации атрибут format задает формат для различных уровней, например «1.1.1.» задает нумерацию 1., 2., … и т.д. для узлов верхнего уровня, 1.1., 1.2., … и т.д. для узлов уровнем ниже и 1.2.1., 1.2.2., … и т. д. для следующего уровня вниз. Вот как выглядит таблица стилей для этого примера в листинге 5.13.

Листинг 5.13. Многоуровневая нумерация

<?xml version="1.0"?>
<хsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="xml"/>
 <xsl:template match="node()">
  <xsl:copy>
   <xsl:number format="1.1.1." level="multiple" count="*"/>
   <xsl:apply-templates select="node()"/>
  </xsl:copy>
 </xsl:template>
</xsl:stylesheet>

Вот результат преобразования planets.xml в новый XML-документ, в котором перенумерованы все уровни элементов в соответствии с иерархией документа:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xml" href="planets.xsl"?>
<PLANETS>1.
 <PLANET>1.1.
  <NAME>1.1.1. Mercury</NAME>
  <MASS>1.1.2. .0553</MASS>
  <DAY>1.1.3. 58.65</DAY>
  <RADIUS>1.1.4. 1516</RADIUS>
  <DENSITY>1.1.5. .983</DENSITY>
  <DISTANCE>1.1.6. 43.4</DISTANCE><!--В перигелии-->
 </PLANET>
 <PLANET>1.2.
  <NAME>1.2.1. Venus</NAME>
  <MASS>1.2.2. .815</MASS>
  <DAY>1.2.3. 116.75</DAY>
  <RADIUS>1.2.4. 3716</RADIUS>
  <DENSITY>1.2.5. .943</DENSITY>
  <DISTANCE>1.2.6 66.8</DISTANCE><!--В перигелии-->
 </PLANET>
 <PLANET>1.3.
  <NAME>1.3.1. Earth</NAME>
  <MASS>1.3.2. 1</MASS>
  <DAY>1.3.3. 1</DAY>
  <RADIUS>1.3.4. 2107</RADIUS>
  <DENSITY>1.3.5. 1</DENSITY>
  <DISTANCE>1.3.6. 128.4</DISTANCE><!--В перигелии-->
 </PLANET>
</PLANETS>

На этом мы завершаем рассмотрение нумерации документов и переходим к последней теме этой главы — расширяемости XSLT.

Оглавление книги


Генерация: 0.572. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз