Примерно так
<xsl:variable name="result" select="$a | $b | $c" />
Выше будет работать для наборов узлов, а не для переменных. Любые входы? XSL
1,0
Это неправильно! Вышеуказанная переменная result
определена так, чтобы содержать объединение трех наборов узлов, а не только одного из них, в зависимости от того, являются ли некоторые другие из них пустыми .
В этом случае правильное выражение XPath: :
$a | $b[not($a)] | $c[not($a | $b)]
Когда эти три переменные не являются наборами узлов, а являются строками, и если эти строковые значения могут иметь любую длину (не только длину 1), соответствующее выражение XPath аналогично:
concat($a,
substring($b, 1 div ($a = '')),
substring($c, 1 div (concat($a, $b) = ''))
)
Здесь мы используем тот факт, что:
substring($s, $k)
- пустая строка ''
всякий раз, когда
$k >= string-length($s)
и
substring($s, 1) = $s
Также:
1 div false()
is positive Infinity
(false()
преобразуется в 0 при использовании в арифметических операциях).
и по определению
positive Infinity > $k
за каждое целое число $k
.
Таким образом,
substring($s, 1 div $somethingFalse) = ''
и
substring($s, 1 div $somethingTrue) = $s
Наконец, , если гарантируется, что три переменные $a
, $b
и $c
могут иметь в качестве значения только один символ, чем мы можем использовать просто:
substring(concat($a, $b, $c), 1, 1)