<TD>needs</TD>
<TD>no</TD>
<TD>introduction.</TD>
</TR>
</xsl:template>
<xsl:template match='PLANET[NAME!='Earth']'>
<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:text> </xsl:text>
<xsl:value-of select='@UNITS'/>
</xsl:template>
<xsl:template match='RADIUS'>
<xsl:value-of select='.'/>
<xsl:text> </xsl:text>
<xsl:value-of select='@UNITS'/>
</xsl:template>
<xsl:template match='DAY'>
<xsl:value-of select='.'/>
<xsl:text> </xsl:text>
<xsl:value-of select='@UNITS'/>
</xsl:template>
</xsl:stylesheet>
Вот результат:
<HTML>
<HEAD>
<TITLE>
The Planets Table
</TITLE>
</HEAD>
<BODY>
<Н1>
The Planets Table
</Н1>
<TABLE BORDER='2'>
<TR>
<TD>Name</TD>
<TD>Mass</TD>
<TD>Radius</TD>
<TD>Day</TD>
</TR>
.
.
.
<TR>
<TD>Earth</TD>
<TD>needs</TD>
<TD>no</TD>
<TD>introduction.</TD>
</TR>
</TABLE>
</BODY>
</HTML>
Результат можно увидеть на рис. 4.1.
Рис. 4.1. Применение предикатов XPath
В следующем примере используется логическая операция >. Это правило применяется ко всем элементам <PLANET>
после позиции 5:
<xsl:template match='PLANET[position() > 5]'>
<xsl:value-of select='.'/>
</xsl:template>
Имеется также функция true
, всегда возвращающая значение true, и функция false
, всегда возвращающая значение false. Функция not
инвертирует логический смысл выражения, как в следующем случае, где я выбираю все элементы <PLANET>
, кроме последнего:
<xsl:template match='PLANET[not(position() = last())]'>
<xsl:value-of select='.'/>
</xsl:template>
Наконец, функция lang
возвращает истину или ложь в зависимости от того, является ли язык контекстного узла (определяемый атрибутами xml:lang
) таким же, как язык, который передан в эту функцию.
Предикаты: числа
В XPath числа хранятся в формате числа с плавающей точкой двойной точности. (Технически все числа XPath хранятся в 64-разрядном формате IEEE числа с плавающей точкой двойной точности, floating- point double.) Все числа хранятся как числа с двойной точностью — даже целые числа, как 5 в рассматриваемом примере:
<xsl:template match='PLANET[position() > 5]'>
<xsl:value-of select='.'/>
</xsl:template>
Над числами можно производить ряд операций:
• +
сложение;