我想知道是否有人記得如何在XSLT中編寫較短的OR語句。我確信有一種方法,但我不記得了。XSLT較短版本的OR條件語句
所以不是
test="$var = 'text1' or $var = 'text2'"
我想使用一個較短的版本像測試=「$ VAR = [‘文本1’,‘文本2’]」但是,我不記得或者找到這種情況的正確速記語法。
如果有人能幫上忙,我會很感激!
非常感謝
我想知道是否有人記得如何在XSLT中編寫較短的OR語句。我確信有一種方法,但我不記得了。XSLT較短版本的OR條件語句
所以不是
test="$var = 'text1' or $var = 'text2'"
我想使用一個較短的版本像測試=「$ VAR = [‘文本1’,‘文本2’]」但是,我不記得或者找到這種情況的正確速記語法。
如果有人能幫上忙,我會很感激!
非常感謝
使用XSLT 2.0(但不與XSLT 1.0),你可以做
<xsl:if test="$var = ('text1','text2')">
也許這就是你正在尋找的語法。
[]運算符只適用於nodeset。也許你正在想當你說[a | b]之類的東西來選擇你的節點集中有一個子元素b的子元素或的節點。但對於字符串比較,除了使用「或」之外,我不知道任何其他方式。
對於字符串值,你似乎是使用你可以使用CONCAT絕招: -
test="contains('__text1____text2__', concat('__', $var, '__'))"
只是兩個項目爲不短但由於5個或更多,它開始看起來更好。
說了這麼多,你使用或公司時,所以它可能是隻是爲了更好地使用一系列或年代大概可以多行: -
test = "
$var = 'text1'
or $var = 'text2'
or $var = 'text3'
or $var = 'text3'"
更多的文本,但更清晰的解決方案。
如果你發現你做很多比較針對一組固定的值,你也可以這樣做:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:cfg="http://tempuri.org/config"
exclude-result-prefixes="cfg"
>
<xsl:output method="text" />
<!-- prepare a fixed list of possible values; note the namespace -->
<config xmlns="http://tempuri.org/config">
<val>text1</val>
<val>text2</val>
<!-- ... -->
</config>
<!-- document('') lets you access the stylesheet itself -->
<xsl:variable name="cfg" select="document('')/*/cfg:config/cfg:val" />
<xsl:template match="/">
<xsl:variable name="var" select="'text2'" />
<!-- check against all possible values in one step -->
<xsl:if test="$cfg[.=$var]">
<xsl:text>Match!</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
上面會打印
Match!
沒有「包含」功能對於序列,但您可以使用索引或相交:
fn:exists(('test1', 'test2') intersect $var))
或
fn:exists(fn:index-of(('test1', 'test2'), $var))
由於只有兩根弦,你原來的解決方案是較短的,但。
這就是我需要的!謝謝:)快到了。 – DashaLuna 2010-02-12 09:50:02