<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>
答案 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>