有没有办法在等式的右边放一个以上的值?
<xsl:choose>
<xsl:when test="Properties/LabeledProperty[Label='Category Code']/Value = 600,605,610">
上面的代码返回:
XPath error : Invalid expression
Properties/LabeledProperty[Label='Category Code']/Value = 600,605,610
^
compilation error: file adsml2adpay.xsl line 107 element when
我不想使用"OR"的原因是,每个"when"测试的正确部分应该有大约20个数字。
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:config="http://tempuri.org/config"
exclude-result-prefixes="config"
>
<config:categories>
<value>600</value>
<value>605</value>
<value>610</value>
</config:categories>
<xsl:variable
name = "vCategories"
select = "document('')/*/config:categories/value"
/>
<xsl:key
name = "kPropertyByLabel"
match = "Properties/LabeledProperty/Value"
use = "../Label"
/>
<xsl:template match="/">
<xsl:choose>
<xsl:when test="key('kPropertyByLabel', 'Category Code') = $vCategories">
<!-- ... -->
</xsl:when>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
这是因为XPath =
运算符在处理节点集时会比较左侧的每个节点和右侧的每个节点(与SQL INNER JOIN
相当)。
因此,您所需要做的就是根据各个值创建一个节点集。使用临时名称空间,您可以在XSLT文件中正确执行此操作。
还要注意,我引入了一个<xsl:key>
,使通过标签选择属性值更加高效。
编辑:您也可以创建一个外部config.xml
文件并执行以下操作:
<xsl:variable name="vConfig" select="document('config.xml')" />
<!-- ... -->
<xsl:when test="key('kPropertyByLabel', 'Category Code') = $vConfig/categories/value">
XSLT2.0增加了序列的概念。在那里做同样的事情更简单:
<xsl:when test="key('kPropertyByLabel', 'Category Code') = tokenize('600,605,610', ',')">
这意味着您可以很容易地将字符串'600,605,610'
作为外部参数传入。