Чтение онлайн

ЖАНРЫ

Холзнер Стивен

Шрифт:

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

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

Поделиться с друзьями: