使用xsl过滤当前属性值:if in for-each

时间:2016-07-18 20:30:09

标签: xslt

输入

<topics>
  <topic author="john">
    <title>How to use a terminal</title>
  </topic>
  <topic author="john">
    <title>How to connect to the server</title>
  </topic>
  <topic author="mark">
    <title>How to query the DB</title>
  </topic>
</topics>

我想做什么

我想为每个作者生成一个文件,该文件仅列出该作者编写的主题的标题。所以John会有一个文件,其中包含2个主题标题,还有一个标记为Mark,其中包含一个主题标题。

John的文件:

 - How to use a terminal
 - How to connect to the server

Mark的文件:

 - How to query the DB

我做了什么

为每个人生成文件的部分工作正常。但是,生成列表的部分是错误的。这是我的(错误的)xslt:

<xsl:template match="topics">    
    <xsl:for-each-group select="/topics/topic" group-by="@author">
        <xsl:result-document href="{current-grouping-key( )}.html">
            <html xmlns="http://www.w3.org/1999/xhtml">
                <head/>
                <body>
                    <ul>
                        <xsl:for-each select="/topics/topic">
                            <xsl:if test="@author='current()/@author'">
                                <li><xsl:value-of select="title"/></li>
                            </xsl:if>
                        </xsl:for-each>  
                    </ul>
                </body>
            </html>
        </xsl:result-document>
    </xsl:for-each-group>
</xsl:template>

1 个答案:

答案 0 :(得分:0)

使用current-group()https://www.w3.org/TR/xslt20/#current-group),只需替换

即可
               <ul>
                    <xsl:for-each select="/topics/topic">
                        <xsl:if test="@author='current()/@author'">
                            <li><xsl:value-of select="title"/></li>
                        </xsl:if>
                    </xsl:for-each> 

               <ul>
                    <xsl:for-each select="current-group()">

                            <li><xsl:value-of select="title"/></li>

                    </xsl:for-each>