=> Главная База Знаний Xslt Предикаты: логические значения


Предикаты: логические значения

Предикаты: логические значения

В выражениях 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']
''.

Листинг 4.7. Определение планеты Земля

<?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>

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

Результат можно увидеть на 1.

Предикаты: логические значения

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
) таким же, как язык, который передан в эту функцию.