Шрифт:
<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>