Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt 基于动态条件对项目列表进行分区_Xslt_Xslt 1.0_Xslt Grouping - Fatal编程技术网

Xslt 基于动态条件对项目列表进行分区

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>

列出一个bug列表

<?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:&#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>

谢谢

使用select=/bugs/bug[notstatus=$vActive]。

您的预期输出如下?啊,谢谢!我得读书了。不过,是否有一种基于键的方法,只是为了更好地理解……您可以使用select=/bugs/bug[notkey'kSearch',status,$pActive]设置另一个方向的键,然后使用XSLT2.0。在XSLT1.0中,不支持用于更改上下文的键函数的第三个参数,因此使用and会有点麻烦。