Xslt 基于动态条件对项目列表进行分区
列出一个bug列表Xslt 基于动态条件对项目列表进行分区,xslt,xslt-1.0,xslt-grouping,Xslt,Xslt 1.0,Xslt Grouping,列出一个bug列表 <?xml version="1.0"?> <bugs> <bug> <status>todo</status> <content> this is a todo bug </content> </bug> <bug> <status>closed</status> <content>
<?xml version="1.0"?>
<bugs>
<bug>
<status>todo</status>
<content> this is a todo bug </content>
</bug>
<bug>
<status>closed</status>
<content>this is a closed bug</content>
</bug>
<bug>
<status>new</status>
<content>this is a new bug</content>
</bug>
<bug>
<status>deferred</status>
<content>this is a deferred bug</content>
</bug>
<bug>
<status>todo</status>
<content>this is another todo bug</content>
</bug>
</bugs>
什么样的XSLT会列出一组给定的活动bug和所有其他bug
根据这里给出的一个很好的答案,我能够构建这个问题的活动部分:,这将是以下XSLT:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ext="http://exslt.org/common"
>
<xsl:output method="text"/>
<xsl:param name="pActive">
<!-- this is supposed to be the dynamic criteria -->
<a>todo</a>
<a>new</a>
</xsl:param>
<xsl:key name="kBugsByStatus" match="bug" use="normalize-space(status)"/>
<xsl:variable name="vActive" select="ext:node-set($pActive)/*"/>
<xsl:template match="/">
<xsl:text>Active bugs:
</xsl:text>
<xsl:apply-templates select="key('kBugsByStatus',$vActive)"/>
<xsl:text>Other bugs:
</xsl:text>
<!-- This is the question: -->
<xsl:apply-templates select="key('kBugsByStatus',???)"/>
</xsl:template>
<xsl:template match="bug">
<xsl:text>* </xsl:text>
<xsl:value-of select="normalize-space(content)"/>
<xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
谢谢 使用select=/bugs/bug[notstatus=$vActive]。您的预期输出如下?啊,谢谢!我得读书了。不过,是否有一种基于键的方法,只是为了更好地理解……您可以使用select=/bugs/bug[notkey'kSearch',status,$pActive]设置另一个方向的键,然后使用XSLT2.0。在XSLT1.0中,不支持用于更改上下文的键函数的第三个参数,因此使用and会有点麻烦。