</HEAD>
<BODY>
<xsl:apply-templates select='PLANET'/>
</BODY>
</HTML>
</xsl:template>
<xsl:template match='PLANET'>
<P>
<xsl:value-of select='position()'/>
<xsl:text> </xsl:text>
<xsl:value-of select='NAME/>
</P>
</xsl:template>
</xsl:stylesheet>
Вот результат. Как видите, планеты перенумерованы:
<HTML>
<HEAD>
<TITLE>
The Planets
</TITLE>
</HEAD>
<BODY>
<P>
1. Mercury
</P>
<P>
2. Venus
</P>
<P>
3. Earth
</P>
</BODY>
</HTML>
Можно также применять функции для работы с наборами узлов в предикатах, как, например, PLANET[position()=last()]
, выбирающая последнего ребенка <PLANET>
контекстного узла
Предикаты: логические значения
В выражениях XPath можно также использовать логические (Boolean) значения. Для чисел ноль принимается за ложь (false), другие значения — за истину (true). Пустая строка, '', также считается ложью, все остальные строки — истиной.
Для вычисления логических результатов true/false можно применять следующие логические операции XPath:
• != означает «не равно»;
• < означает «меньше, чем» (в документах XML или XSL используйте <);
• <= означает «меньше или равно» (в документах XML или XSL используйте <=);
• = означает «равно» (программисты на С, С++, Java и JavaScript, обратите внимание: эта операция пишется как один знак =, а не два);
• > означает «больше, чем»;
• >= означает «больше или равно».
ИСПОЛЬЗОВАНИЕ СИМВОЛА <
Особенно обратите внимание на то, что непосредственно в документах XML или XSL нельзя использовать символ <, необходимо использовать ссылку на сущность <.
Для связи логических выражений логическими операциями And и Or используются ключевые слова and и or; слово not инвертирует логический смысл выражения — с истины на ложь или со лжи на истину.
В листинге 4.7 я определяю элемент <PLANET>
Земли и помещаю в таблицу строки 'Earth
', 'needs
', 'no
' и 'introduction
' вместо числовых данных Земли. Я определяю, которая из планет есть Земля, при помощи предиката '[NAME='Earth']'
, проверяющего значение элемента <NAME>
, которое, в свою очередь, представляет собой заключенный в элементе текст. Я также предоставил шаблон для других планет, удовлетворяющих предикату '[NAME!='Earth']
''.
<?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'>
<TR>
<TD>Name</TD>
<TD>Mass</TD>
<TD>Radius</TD>
<TD>Day</TD>
</TR>
<xsl:apply-templates/>
</TABLE>
</BODY>
</HTML>
</xsl:template>
<xsl:template match='PLANET[NAME='Earth']'>
<TR>
<TD>Earth</TD>