Книга: XSLT

Применение оси following

Применение оси following

Ось following (следующий) содержит все узлы, расположенные после контекстного узла в соответствии с установленным в документе порядком (другими словами, в порядке, в котором они появляются в документе, начиная с его начала), исключая всех потомков контекстного узла, а также исключая узлы атрибутов и пространств имен.

В этом примере (листинг 7.8) я выбираю каждый элемент <PLANET> и копирую все последующие элементы в результирующий документ.

Листинг 7.8. Применение оси following

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="xml"/>
 <xsl:template match="PLANET">
  <xsl:for-each select="following::*">
   <xsl:copy-of select="."/>
  </xsl:for-each>
 </xsl:template>
</xsl:stylesheet>

Далее показан результат. Обратите внимание на то, что, когда этот шаблон выбирает элемент <PLANET> Меркурия, он копирует все последующие элементы — то есть Венеру, затем всех потомков Венеры, далее Землю и затем всех потомков Земли. После этого он выбирает элемент <PLANET> Венеры и копирует все следующие элементы, то есть Землю и всех потомков Земли:

<?xml version="1.0" encoding="UTF-8"?>
<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><!--B перигелии-->
</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>Earth</NAME>
 <MASS UNITS="(Earth = 1)">1</MASS>
 <DAY UNITS="days">1</DAY>
 <RADIUS UNITS="miles">2107</RADIUS>
 <DENSITY UNITS="(Earth = 1)">1</DENSITY>
 <DISTANCE UNITS="million miles">128.4</DISTANCE><!--B перигелии-->
</PLANET>
<NAME>Earth</NAME>
<MASS UNITS="(Earth = 1)">1</MASS>
<DAY UNITS="days">1</DAY>
<RADIUS UNITS="miles">2107</RADIUS>
<DENSITY UNITS="(Earth = 1)">1</DENSITY>
<DISTANCE UNITS="million miles">128.4</DISTANCE>
<PLANET>
 <NAME>Earth</NAME>
 <MASS UNITS="(Earth = 1)">1</MASS>
 <DAY UNITS="days">1</DAY>
 <RADIUS UNITS="miles">2107</RADIUS>
 <DENSITY UNITS="(Earth = 1)">1</DENSITY>
 <DISTANCE UNITS="million miles">128.4</DISTANCE><!--B перигелии-->
</PLANET>
<NAME>Earth</NAME>
<MASS UNITS="(Earth = 1)">1</MASS>
<DAY UNITS="days">1</DAY>
<RADIUS UNITS="miles">2107</RADIUS>
<DENSITY UNITS="(Earth = 1)">1</DENSITY>
<DISTANCE UNITS="million miles">128.4</DISTANCE>

С другой стороны, при использовании оси following-sibling в результирующий документ будут скопированы только следующие братья, то есть только элементы <PLANET>, как мы увидим в следующем разделе.

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


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