Что делает test = "element [@attribute]" в XSLT? - PullRequest
2 голосов
/ 16 ноября 2009

Что это делает именно?

<xsl:if test="./employee/first-name[@id='14']" >

Я имею в виду, когда этот случай будет верным, если ./employee/first-name[@id]! = null или "", или что?

Редактировать

Я отредактировал приведенное выше утверждение, поэтому оно проверяет, имеет ли тело элемента name-id с id = 14 тело или его тело содержит данные, или возвращает true, если у события имени нет тела?

Ответы [ 3 ]

11 голосов
/ 16 ноября 2009

Если запрос в <xsl:if test=...> возвращает хотя бы один узел , тогда условное значение преобразуется в true.

Новое выражение XSLT, которое вы дали:

<xsl:if test="./employee/first-name[@id='14']" >

будет иметь значение true тогда и только тогда, когда существует узел first-name в employee, атрибут id которого равен строке '14'

<employee><first-name id="" /></employee>     <!-- does NOT match -->
<employee><first-name id="014" /></employee>  <!-- does NOT match -->
<employee>
  <first-name id="foobar" />
  <first-name id="14" />                      <!-- DOES match -->
</employee>
3 голосов
/ 16 ноября 2009

Кажется, что есть некоторые недостающие фрагменты, так как последний or "" выдаст ошибку. Но давайте посмотрим:

    ./                    search within current node
    employee/first-name   for an employee tag with an first-name child tag
    [@id]                 where first-name tag have an id attribute
    !=null                and that first-name tag have some value
2 голосов
/ 16 ноября 2009

<xsl:if> проверяет выражение (например, if в традиционных языках). Результат выражения оценивается как логическое значение.

В вашем случае выражение является селектором XPath (/employee/first-name[@id]) - оно всегда будет возвращать набор узлов. Наборы узлов оцениваются как false только тогда, когда они пусты (например, не найдено подходящих узлов).

Выражение также может быть что-то вроде number(/employee/id). Теперь результатом выражения является число, которое оценивается как false, если оно равно нулю, или NaN, true во всех других случаях.

Другими значениями false являются пустая строка '' (true во всех других случаях) и результат самого false(). Обратите внимание, что также есть функция true() для возврата логического значения true.

Также обратите внимание, что строка 'false' оценивается как true, согласно описанному правилу для строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...