The test
, указанных в <xsl:if>
работ, если это называется функцией boolean
. Эта функция работает не так, как вы думаете. Если его аргумент оценивается набором узлов (который будет, если вы используете путь в качестве его аргумента), он вернет true, если набор узлов не пуст, а false в противном случае. Так эффективно, вы проверяете существование элемента, а не его значение. Если foo
содержит false
,
<xsl:if test="/path/to/foo">
всегда будет оценивать к истине, так что вы действительно просят в этом тесте «существует этот элемент?» а не "является ли значение элемента истинным?" И элемент существует.
Правило, логические значения должны быть true
, false
, 1
или 0
является частью схемы XML (which see), а не XPath, что ничего об этом правиле не знает. (XPath 1.0, то есть XPath 2.0/XQuery 1.0 имеет the fn:boolean
function, который умеет, т. Е. Знает XML-схему, оценивает логические значения.) Чтобы определить, истинно ли значение в XSLT, вы должны явно его проверить:
<xsl:if test="/path/to/foo = 'true' or /path/to/foo = '1'">
Вы можете отправить текущее выражение XPath с помощью XML-фрагмента? –
Это не вопрос. Пожалуйста, дайте конкретный пример - что такое выражение XPath и что такое XML-файл (как можно проще, пожалуйста), на котором оценивается это выражение XPath? –
Предпочитаете видеть пример, я предполагаю, что в синтаксисе есть небольшая ошибка. –