2010-11-17 3 views
2

Я хочу сделать 0 => 1 и 1 => 0, есть ли простой способ сделать это в xslt?Есть ли простой способ инвертировать булевы значения в xslt

+0

Есть много способов, но контекст будет иметь значение , Кроме того, что это за «простые» критерии? – 2010-11-17 23:16:38

+0

Это на самом деле вопрос XPath. –

+0

Хороший вопрос, +1. Кроме превосходного примера @Alejandro, см. Мой ответ для других простых и коротких выражений. –

ответ

2

Если значение $ является экземпляром или литьевой как тип число данных, это было бы наиболее простое выражение:

1 - $value 
2

Функция "не"?

http://zvon.org/xxl/XSLTreference/Output/function_not.html

хотя, если вы действительно хотите номер, который вы должны будете использовать функцию «номер»

+0

Этот номер (not ($ value)) будет 'number (not (boolean ($ value))): три вызова функций. Можно спросить, что значит простые критерии. – 2010-11-17 23:19:06

+0

справедливая точка, я думаю, что все это зависит от того, являются ли требуемые входные и выходные данные фактически логическими или номерами –

2

Есть много выражений, которые принимают 0 или 1 и оценки, соответственно, к 1 или 0.:

@Alejandro уже указывал один из самых простых таких выражений, здесь другие:

$a + $b - $v 

Это обобщение @ формулы Алехандро (1 - $v) и преобразует $a в $b и $b к $a для любых двух чисел $a и $b

$v = 0 

Формально нужно написать это как: number($v = 0), но в XPath 1.0, если это выражение используется в других выражениях, где ожидается число, преобразование выполняется автоматически (за сценой).

, а также:

$v + 1 mod 2 

и даже:

substring('01',$v+1) 

В XPath 2.0 есть естественная языковая поддержка для таких выражений:

if($v eq $a) 
    then $b 
    else $a 

или намного короче:

($a,$b)[not(. eq $v)] 

Наконец, это эквивалентно XPath 2.0 выражения для узлов$a и $b:

($a,$b) except $v 
+0

+1 Для общей формулы.Я должен это объяснить. – 2010-11-18 12:52:55

Смежные вопросы