Книга: 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>
Результат можно увидеть на рис. 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
) таким же, как язык, который передан в эту функцию.
- Предикаты: наборы узлов
- Предикаты: фрагменты результирующего дерева
- 4.10. Логические выражения
- 6.7. Логические связки
- Предикаты: числа
- Шаги расположения XPath, часть 3: предикаты
- Выражения в значениях по умолчанию для доменов
- Значения переменных по умолчанию
- 1. Пустые значения (Empty-значения)
- 2. Неопределенные значения (Null-значения)
- 3. Null-значения и общее правило вычисления выражений
- 4. Null-значения и логические операции