</HEAD>
<BODY>
<H1>
The Planets Table
</H1>
<TABLE BORDER='2'>
<TD>Name</TD>
<TD>Mass</TD>
<TD>Radius</TD>
<TD>Day</TD>
<xsl:apply-templates/>
</TABLE>
</BODY>
</HTML>
</xsl:template>
<xsl:template match='PLANET'>
<TR>
<TD><xsl:value-of select='NAME'/></TD>
<TD><xsl:apply-templates select='MASS'/></TD>
<TD><xsl:apply-templates select='RADIUS'/></TD>
<TD><xsl:apply-templates select='DAY'/></TD>
</TR>
</xsl:template>
<xsl:template match='MASS'>
<xsl:value-of select='.'/>
</xsl:template>
<xsl:template match='RADIUS'>
<xsl:value-of select='.'/>
</xsl:template>
<xsl:template match='DAY'>
<xsl:value-of select='.'/>
</xsl:template>
</xsl:stylesheet>
Этот код только воспроизводит то, что мы уже делали ранее в предыдущей версии planets.xsl, использующей <xsl:value-of select='MASS'>, <xsl:value-of select='RADIUS'> и т.д., то есть читающей и отображающей данные каждого элемента <MASS>, <RADIUS> и <DAY>. Теперь же, когда у нас есть отдельный шаблон для каждого из этих элементов, можно осуществить дополнительную обработку — например чтение значений атрибутов.
Чтение значений атрибутов
Чтобы получить доступ к значению атрибута при помощи XPath, нужно добавить к имени атрибута префикс @, например: '@src', '@height', '@width' и т.д.
Для выбора любого атрибута можно применить выражение '@*'. Чтобы сослаться на атрибут UNITS в каждом элементе <MASS>, <RADIUS> и <DAY>, следует использовать выражение '@UNITS'. Следовательно, получить значения и отобразить единицы (unit) каждого измерения в planets.xml можно так (листинг 3.3).
<?xml version='1.0'?>
<xsl:stylesheet version='1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match='/PLANETS'>
<HTML>
<HEAD>
<TITLE>
The Planets Table
</TITLE>
</HEAD>
<BODY>
<H1>
The Planets Table
</H1>
<TABLE BORDER='2'>
<TD>Name</TD>
<TD>Mass</TD>
<TD>Radius</TD>
<TD>Day</TD>
<xsl:apply-templates/>
</TABLE>
</BODY>
</HTML>
</xsl:template>
<xsl:template match='PLANET'>
<TR>
<TD><xsl:value-of select='NAME'/></TD>
<TD><xsl:apply-templates select='MASS'/></TD>
<TD><xsl:apply-templates select='RADIUS'/></TD>
<TD><xsl:apply-templates select='DAY'/></TD>
</TR>
</xsl:template>
<xsl:template match='MASS'>
<xsl:value-of select='.'/>
<xsl:value-of select='@UNITS'/>
</xsl:template>
<xsl:template match='RADIUS'>
<xsl:value-of select='.'/>
<xsl:value-of select='@UNITS'/>
</xsl:template>
