вам нужно использовать fn:false()
или false()
и fn:true()
или true()
вместо того, чтобы просто писать true
или false
.
Это правильный пример:
T.c.query('xs:boolean(@attribute[1]) = false()') ValueEqualsFalse,
T.c.query('xs:boolean(@attribute[1]) = true()') ValueEqualsTrue,
T.c.query('xs:boolean(@attribute[1]) != false()') ValueNotEqualsFalse,
T.c.query('xs:boolean(@attribute[1]) != true()') ValueNotEqualsTrue
Если вы не используете функцию false()
, false
обрабатывается как выражение пути, то есть процессор думает, что вы запрашиваете элемент <false />
.Следовательно, существует функция только для констант true
и false
, поскольку это единственный способ провести различие между логическими константами и выражением пути.
Более подробно, использование отрицания все равновернуть false
в каждом примере.
Это не то, что вы хотите (просто для демонстрации):
T.c.query('not(xs:boolean(@attribute[1])) = false') ValueEqualsFalse,
T.c.query('not(xs:boolean(@attribute[1])) = true') ValueEqualsTrue,
T.c.query('not(xs:boolean(@attribute[1])) != false') ValueNotEqualsFalse,
T.c.query('not(xs:boolean(@attribute[1])) != true') ValueNotEqualsTrue
литералы false
и true
оба оцениваются как пустая последовательность, которая не соответствует ни логическому значению false()
, ни логическому значению true()
.