<xsl:template match='PLANET'>

  <xsl:for-each select='following-sibling::*'>

   <xsl:copy-of select='.'/>

  <xsl:for-each>

 </xsl:template>

</xsl:stylesheet>

При этом сначала копируются два узла-брата, следующие за Меркурием (Венера и Земля), затем копируется следующий узел-брат Венеры, Земля. У самой Земли нет следующих за ней братьев, поэтому результат выглядит так:

<?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>

<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>

<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>

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

Ось namespace содержит узлы пространств имен контекстного узла. Заметьте, что эта ось пуста, если контекстным узлом не является элемент. У элемента присутствует узел пространства имен для:

• каждого атрибута элемента, чье имя начинается с «xmlns:»;

• каждого атрибута элемента-предка, чье имя начинается с «xmlns:» (конечно, если сам элемент или ближайший предок не объявит пространство имен заново);

• атрибута xmlns, если элемент или предок имеет атрибут xmlns.

В следующем примере (листинг 7.10) я хочу отобразить пространство имен элемента <PLANET> в результирующем документе, и в исходном документе я присвоил пространству имен значение «http://www.starpowder.com».

Листинг 7.10. planets.xml с объявлением пространства имен

<?xml version='1.0'?>

<?xml-stylesheet type='text/xml' href='planets.xsl'?>

<PLANETS xmlns='http://www.starpowder.com'>

 <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><!--В перигелии-- >

 </PLANET>

 .

 .

 .

Вот таблица стилей (листинг 7.11), в которой я проверяю пространства имен, используемые в элементе <PLANETS>.

Листинг 7.11. Применение оси namespace в planets.xml

<?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='PLANETS'>

  <xsl:value-of select='namespace::*'/>

 </xsl:template>

</xsl:stylesheet>

А вот результирующий документ (заметьте, что вид документа может меняться в зависимости от процессора XSLT):

<?xml version='1.0' encoding='UTF-8'?>

http://www.starpowder.com

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

Ось parent (родитель) содержит родителя (и только родителя) контекстного узла, если таковой имеется.

Предположим, что я хочу изменить содержимое элемента Земли <MASS> на «The mass of Earth is set to 1.>> (Масса Земли принимается за 1). В следующем шаблоне (листинг 7.12) для этого проверяется, содержит ли родитель <PLANET> элемента <MASS> элемент <NAME> со строковым значением «Earth».

Листинг 7.12. Применение оси parent

<?xml version='1.0'?>

<xsl:stylesheet version='1.0'

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

 <xsl:output method='xml'/>

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

0

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

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