0

我基本上是在编辑 ItemStyle.xsl 以使其检索我需要的内容并通过 CQWP(内容查询 Web 部件)显示。我需要它只显示评论最多的前 5 个帖子。可以通过@NumComments 检索评论。我对 XSL 不够熟悉,不知道该怎么做,我假设使用 count?有小费吗?

这是该模板的当前 XSL 代码,它只显示所有帖子。

<xsl:template name="MostCommented" match="Row[@Style='MostCommented']" mode="itemstyle">
    <xsl:variable name="SafeLinkUrl">
        <xsl:call-template name="OuterTemplate.GetSafeLink">
            <xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>
        </xsl:call-template>
    </xsl:variable>
    <xsl:variable name="DisplayTitle">
        <xsl:call-template name="OuterTemplate.GetTitle">
            <xsl:with-param name="Title" select="@Title"/>
            <xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>
        </xsl:call-template>
    </xsl:variable>
    <div>
        <a href="{$SafeLinkUrl}" target="{$LinkTarget}" title="{@LinkToolTip}">
            <xsl:value-of select="$DisplayTitle"/>
        </a>
    </div>
</xsl:template>
4

2 回答 2

1

您需要在与父级匹配的模板中添加此代码Row

<xsl:apply-templates select="Row[@Style='MostCommented']" mode="itemstyle">
 <xsl:sort select="@NumComments" data-type="number" order="descending"/>
</xsl:apply-templates>

此外,在您的模板内(将作为xsl:apply-templates上述结果选择执行的模板)将所有现有代码包装在一个条件中,如下所示

<xsl:template name="MostCommented" match="Row[@Style='MostCommented']" mode="itemstyle">
 <xsl:if test="not(position() > 5)">
  <!-- Put all already-existing code here -->
 </xsl:if>
</xsl:template> 

这是一个完整的示例,说明了这种技术

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/*">
     <t>
       <xsl:apply-templates select="*">
        <xsl:sort select="@valued"
            data-type="number" order="descending"/>
       </xsl:apply-templates>
     </t>
 </xsl:template>

 <xsl:template match="post">
  <xsl:if test="not(position() >5)">
   <xsl:copy-of select="."/>
  </xsl:if>
 </xsl:template>
</xsl:stylesheet>

当此转换应用于以下 XML 文档时(因为您忘记提供一个!!!):

<t>
 <post valued="5"/>
 <post valued="2"/>
 <post valued="9"/>
 <post valued="8"/>
 <post valued="6"/>
 <post valued="3"/>
 <post valued="4"/>
 <post valued="10"/>
 <post valued="2"/>
 <post valued="7"/>
</t>

产生了想要的正确结果

<t>
   <post valued="10"/>
   <post valued="9"/>
   <post valued="8"/>
   <post valued="7"/>
   <post valued="6"/>
</t>
于 2011-12-23T19:48:15.753 回答
0

我能够直接在 CQWP Web 部件而不是 ItemStyle.xsl 中执行此操作

更换

<property name="QueryOverride" type="string" />

<property name="QueryOverride" type="string"><![CDATA[<OrderBy><FieldRef Name="NumComments" Nullable="True" Type="Lookup" Ascending="False"/></OrderBy>]]></property>
于 2012-01-03T21:38:16.880 回答