<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">
XSLT 2.0 添加了序列的概念。在那里做同样的事情更简单:
<xsl:when test="key('kPropertyByLabel', 'Category Code') = tokenize('600,605,610', ',')">
这意味着您可以轻松地将字符串'600,605,610'
作为外部参数传递。