是否可以将其他条件添加到正在生成密钥的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节点。

+0

非常接近我最终做的。我忽略了包括我完全忽略的这段代码; '' 所以我需要做的改变很简单回想起来。 /叹息 – Otis 2009-11-10 17:04:54

+0

这就是生活。 ;-) – Tomalak 2009-11-10 17:32:22