Как правило, каждый следует соглашениям, используемым в стандартной библиотеке языка.
Условные выражения в XSLT представляют собой либо унарное «if»:
<xsl:if test="some Boolean condition">
<!-- "if" stuff (there is no "else" here) -->
</xsl:if>
, либо более похожее на оператор switch в других языках:
<xsl:choose>
<xsl:when test="some Boolean condition">
<!-- "if" stuff -->
</xsl:when>
<xsl:otherwise>
<!-- "else" stuff -->
</xsl:otherwise>
</xsl:choose>
, где есть место для такого же количества
s, как вам нравится.
Каждое выражение XPath может быть вычислено как логическое в соответствии с набором правил . Они (по большей части) сводятся к "если есть что-то -> истина
" / "если ничего нет -> ложь
"
] false
false
(как и NaN
) false
false ()
равно ложь
истина
(особенно: 'ложь'
истинно
и '0'
равно истинно
) Изменить: есть, конечно, более продвинутый (и более идиоматический) метод управления потоком программы, и это сопоставление с шаблоном:
<xsl:template match="node[contains(., 'some text')]">
<!-- output X -->
</xsl:template>
<xsl:template match="node[not(contains(., 'some text'))]">
<!-- output Y -->
</xsl:template>
<xsl:template match="/">
<xsl:apply-templates select=".//node" />
</xsl:template>
Написание шаблонов, которые соответствуют определенным узлам и использование
для заставить XSLT-процессор выбирать подходящие лучше, чем писать сложные конструкции
или
.
Приведенный выше пример эквивалентен императивному стилю:
<xsl:template match="/">
<xsl:for-each select=".//node">
<xsl:choose>
<xsl:when test="contains(., 'some text')">
<!-- output X -->
</xsl:when>
<xsl:when test="not(contains(., 'some text'))">
<!-- output Y -->
</xsl:when>
<xsl:choose>
<xsl:for-each>
</xsl:template>
Новички в XSLT склонны выбирать последнюю форму из-за ее знакомства, но стоит изучить сопоставление шаблонов вместо использования условных выражений. (также см. .)
is true
)
Редактировать: Конечно, существует более продвинутый (и более идиоматический) метод управления программой поток, и это сопоставление шаблонов:
<xsl:template match="node[contains(., 'some text')]">
<!-- output X -->
</xsl:template>
<xsl:template match="node[not(contains(., 'some text'))]">
<!-- output Y -->
</xsl:template>
<xsl:template match="/">
<xsl:apply-templates select=".//node" />
</xsl:template>
Написание шаблонов, которые соответствуют определенным узлам, и использование
, чтобы процессор XSLT выбирал подходящие, лучше, чем писать сложные
или
конструкции.
Приведенный выше пример эквивалентен императивному стилю:
<xsl:template match="/">
<xsl:for-each select=".//node">
<xsl:choose>
<xsl:when test="contains(., 'some text')">
<!-- output X -->
</xsl:when>
<xsl:when test="not(contains(., 'some text'))">
<!-- output Y -->
</xsl:when>
<xsl:choose>
<xsl:for-each>
</xsl:template>
новички в XSLT склонны выбирать последнюю форму из-за ее знакомства, но стоит изучить сопоставление шаблонов вместо использования условных выражений. (также см. .)
is true
)
Редактировать: Конечно, есть более продвинутый (и более идиоматический) метод управления программой поток, и это сопоставление шаблонов:
<xsl:template match="node[contains(., 'some text')]">
<!-- output X -->
</xsl:template>
<xsl:template match="node[not(contains(., 'some text'))]">
<!-- output Y -->
</xsl:template>
<xsl:template match="/">
<xsl:apply-templates select=".//node" />
</xsl:template>
Написание шаблонов, которые соответствуют определенным узлам, и использование
, чтобы процессор XSLT выбирал подходящие, лучше, чем писать сложные
или
конструкции.
Приведенный выше пример эквивалентен императивному стилю:
<xsl:template match="/">
<xsl:for-each select=".//node">
<xsl:choose>
<xsl:when test="contains(., 'some text')">
<!-- output X -->
</xsl:when>
<xsl:when test="not(contains(., 'some text'))">
<!-- output Y -->
</xsl:when>
<xsl:choose>
<xsl:for-each>
</xsl:template>
Новички в XSLT склонны выбирать последнюю форму из-за ее знакомства, но стоит изучить сопоставление шаблонов вместо использования условных выражений. (также см. .)
Конечно, существует более продвинутый (и более идиоматический) метод управления потоком программы, и это сопоставление шаблонов:<xsl:template match="node[contains(., 'some text')]">
<!-- output X -->
</xsl:template>
<xsl:template match="node[not(contains(., 'some text'))]">
<!-- output Y -->
</xsl:template>
<xsl:template match="/">
<xsl:apply-templates select=".//node" />
</xsl:template>
Написание шаблонов, соответствующих определенным узлам, и использование
для создания XSLT-процессор выбирает подходящие, лучше, чем писать сложные конструкции
или
.
Приведенный выше пример эквивалентен императивному стилю:
<xsl:template match="/">
<xsl:for-each select=".//node">
<xsl:choose>
<xsl:when test="contains(., 'some text')">
<!-- output X -->
</xsl:when>
<xsl:when test="not(contains(., 'some text'))">
<!-- output Y -->
</xsl:when>
<xsl:choose>
<xsl:for-each>
</xsl:template>
Новички в XSLT склонны выбирать последнюю форму из-за ее знакомства, но стоит изучить сопоставление шаблонов вместо использования условных выражений. (также см. .)
Конечно, существует более продвинутый (и более идиоматический) метод управления потоком программы, и это сопоставление шаблонов:<xsl:template match="node[contains(., 'some text')]">
<!-- output X -->
</xsl:template>
<xsl:template match="node[not(contains(., 'some text'))]">
<!-- output Y -->
</xsl:template>
<xsl:template match="/">
<xsl:apply-templates select=".//node" />
</xsl:template>
Написание шаблонов, соответствующих определенным узлам, и использование
для создания XSLT-процессор выбирает подходящие, лучше, чем писать сложные конструкции
или
.
Приведенный выше пример эквивалентен императивному стилю:
<xsl:template match="/">
<xsl:for-each select=".//node">
<xsl:choose>
<xsl:when test="contains(., 'some text')">
<!-- output X -->
</xsl:when>
<xsl:when test="not(contains(., 'some text'))">
<!-- output Y -->
</xsl:when>
<xsl:choose>
<xsl:for-each>
</xsl:template>
Новички в XSLT склонны выбирать последнюю форму из-за ее знакомства, но стоит изучить сопоставление шаблонов вместо использования условных выражений. (также см. .)
, чтобы заставить XSLT-процессор выбирать подходящие, лучше, чем писать сложные конструкции
или
.
Приведенный выше пример эквивалентен императивному стилю:
<xsl:template match="/">
<xsl:for-each select=".//node">
<xsl:choose>
<xsl:when test="contains(., 'some text')">
<!-- output X -->
</xsl:when>
<xsl:when test="not(contains(., 'some text'))">
<!-- output Y -->
</xsl:when>
<xsl:choose>
<xsl:for-each>
</xsl:template>
новички в XSLT склонны выбирать последнюю форму из-за ее знакомства, но стоит изучить сопоставление шаблонов вместо использования условных выражений. (также см. .)
, чтобы заставить XSLT-процессор выбирать подходящие, лучше, чем писать сложные конструкции
или
.
Приведенный выше пример эквивалентен императивному стилю:
<xsl:template match="/">
<xsl:for-each select=".//node">
<xsl:choose>
<xsl:when test="contains(., 'some text')">
<!-- output X -->
</xsl:when>
<xsl:when test="not(contains(., 'some text'))">
<!-- output Y -->
</xsl:when>
<xsl:choose>
<xsl:for-each>
</xsl:template>
Новички в XSLT склонны выбирать последнюю форму из-за ее знакомства, но стоит изучить сопоставление шаблонов вместо использования условных выражений. (также см. .)
XSL имеет
, но вы, вероятно, больше ищете
/ < xsl: when>
/
последовательность. Некоторые примеры здесь (внизу). Возможно:
<xsl:choose>
<xsl:when test="[conditionOne] or [conditionTwo]">
<!-- do [action] -->
</xsl:when>
<xsl:otherwise>
<!-- do [alternative action] -->
</xsl:otherwise>
</xsl:choose>
В этом случае вам нужно будет использовать xsl: choose
. Это похоже на использование if / else с заключительным словом else.
<xsl:choose>
<xsl:when test="condition one or condition two">
<!-- action -->
</xsl:when>
<xsl:otherwise>
<!-- alternative action -->
</xsl:otherwise>
</xsl:choose>
Общий синтаксис оператора if -
<xsl:if test="expression">
...some output if the expression is true...
</xsl:if>
Не уверен, есть ли в XSL условие else, но вы должны иметь возможность проверить, истинно ли оно, а затем проверить, если ложно, или наоборот.