我有这样的XML:
<DocumentElement>
<ManagerReport>
<UserName>username</UserName>
<ShortTerm>2</ShortTerm>
<LongTerm>4</LongTerm>
<SupervisorContact>ADMIN@COMPANY.COM</SupervisorContact>
<DBName>SQLDB1</DBName>
</ManagerReport>
... more ManagerReport nodes...
</DocumentElement>
我正在使用以下密钥对DBName进行分组(Muenchian分组):
<xsl:key name="groups" match="ManagerReport" use="./DBName"/>
以及以下模板:
<xsl:template match="/DocumentElement">
<HTML>
<BODY>
<xsl:apply-templates select="ManagerReport[generate-id() = generate-id(key('groups', ./DBName)[1])]"/>
</BODY>
</HTML>
<xsl:template match ="ManagerReport">
<TEXT>
The following employees have documents checked out in <xsl:value-of select="./DBName"/>:
</TEXT>
<BR></BR>
<TABLE Border = "1">
<TR>
<TH>Username</TH>
<TH>Short Term</TH>
<TH>Medium Term</TH>
<TH>Long Term</TH>
</TR>
<xsl:for-each select="key('groups',./DBName)">
<xsl:if test="./SupervisorContact = $mgr">
<TR>
<TD>
<xsl:value-of select ="./UserName"/>
</TD>
<TD>
<xsl:call-template name ="ApplyTemplatesOrDefault">
<xsl:with-param name="elem" select="./ShortTerm"/>
<xsl:with-param name="default">0</xsl:with-param>
</xsl:call-template>
</TD>
<TD>
<xsl:call-template name ="ApplyTemplatesOrDefault">
<xsl:with-param name="elem" select="./MedTerm"/>
<xsl:with-param name="default">0</xsl:with-param>
</xsl:call-template>
</TD>
<TD>
<xsl:call-template name ="ApplyTemplatesOrDefault">
<xsl:with-param name="elem" select="./LongTerm"/>
<xsl:with-param name="default">0</xsl:with-param>
</xsl:call-template>
</TD>
</TR>
</xsl:if>
</xsl:for-each>
</TABLE>
<BR></BR>
<BR></BR>
此模板的结果是每个数据库的表,其中包含相应管理器报告节点中的信息。 mgr
值作为参数传入,以便仅打印对应于特定主管的ManagerReport
值。
这很好用,除了如果没有对应于给定SupervisorContact
的特定DBName
的节点,则打印一个空表(只是标题)。我不想打印这些特定的表格。
我能想象的唯一方法是在match
密钥上添加谓词groups
,这是严格禁止的。我怎样才能摆脱这些&#34;空&#34;表?
请注意我正在使用,并且必须使用XSL 1.0 。
答案 0 :(得分:0)
您似乎可以通过将xsl:apply-templates
替换为<xsl:apply-templates select="ManagerReport[generate-id() = generate-id(key('groups', ./DBName)[1])]"/>
来将条件放在<xsl:apply-templates select="ManagerReport[generate-id() = generate-id(key('groups', ./DBName)[1]) and key('groups', DBName)[SupervisorContact = $mgr]]"/>
上。