根据动态条件对项列表进行分区

时间:2014-12-11 19:05:09

标签: xslt xslt-1.0 xslt-grouping

列出错误列表

<?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会列出一组给定的&#34;活动&#34;错误和所有其他?

我能够构建&#34;活跃&#34;这个问题的一半,基于这里给出的优秀答案:XSLT: Using variables in a key function,这将是以下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:&#xA;</xsl:text>
    <xsl:apply-templates select="key('kBugsByStatus',$vActive)"/>

    <xsl:text>Other bugs:&#xA;</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>&#xA;</xsl:text>
  </xsl:template>

</xsl:stylesheet>

谢谢!

1 个答案:

答案 0 :(得分:0)

使用select="/bugs/bug[not(status = $vActive)]"