是否可以将其他条件添加到正在生成密钥的XSL选择中?
问题描述:
我有一个存储位置的XML文档,其中有一个Type节点,指示存储的类型以及一组现有的模板,用于根据每个位置的状态向每个位置添加一个关键字,然后将这些关键字按其状态顺序添加到HTML中。是否可以将其他条件添加到正在生成密钥的XSL选择中?
我需要做的是从显示中排除所有没有Type 1的状态。在for-each循环中很容易跳过这些位置的显示,但我最终显示的状态显示为他们没有价值。
这里的<select/>
HTML标签里面的代码:
<xsl:apply-templates select="$locations/descendant::Locations" mode="locations.list"/>
该模板看起来是这样的:
<xsl:template match="Locations" mode="locations.list">
<xsl:apply-templates select="Location[generate-id(.) = generate-id(key('state', State)[1])]" mode="locations.list.location"/>
</xsl:template>
它调用模板的样子:
<xsl:template match="Location" mode="locations.list.location">
<option value="state"><xsl:value-of select="normalize-space(State)"/></option>
<xsl:for-each select="key('state', State)">
<option value="{normalize-space(SiteKey)}"><xsl:value-of select="normalize-space(Location)/></option>
</xsl:for-each>
<option value=""/>
</xsl:template>
通常在<xsl:apply-templates select="Location[generate-id(.) = generate-id(key('state', State)[1])]" mode="locations.list.location"/>
我只是在选择中指出我只对此感兴趣在类型为'1'的地方,但我似乎无法找到一种方法来将该条件与密钥生成代码一起插入。
答
没有看到你的整个输入XML,这是一些猜测:
<xsl:apply-templates
mode = "locations.list.location"
select = "Location[
generate-id(.)
=
generate-id(key('state', State)[Type = '1'][1])
]"
/>
选择Location
S其中唯一的ID等于第一Location
当前State
节点。
非常接近我最终做的。我忽略了包括我完全忽略的这段代码; ' ' 所以我需要做的改变很简单回想起来。 /叹息 –
Otis
2009-11-10 17:04:54
这就是生活。 ;-) – Tomalak 2009-11-10 17:32:22