</TR>

   </xsl:for-each>

  </TABLE>

 </BODY>

</HTML>

Вот и все. Я применил здесь упрощенную таблицу стилей, чтобы подчеркнуть, что при помощи таких осей потомков, как descendant или descendant-or-self, вы можете автоматически обрабатывать все выбираемые узлы, во многом аналогично тому, как это делают элементы <xsl:for-each> или <xsl:template>.

Применение оси 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>, как мы увидим в следующем разделе.

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

Ось following-sibling содержит всех последующих братьев контекстного узла.

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

Листинг 7.9. Применение оси following-sibling

<?xml version='1.0'?>

<xsl:stylesheet version='1.0'

 xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

 <xsl:output method='xml'/>

Вы читаете XSLT
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату