XSL按标题排序

时间:2013-03-08 12:34:42

标签: sorting xslt-1.0

我没有看到解决方案,希望有人可以帮助我。我想按标题对结果进行排序。但我不知道在何处以及如何将排序放入XSL文件中。

有人能帮助我吗?

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"                
    xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="TotalResults" />
  <xsl:template match="NumberOfResults" />

  <xsl:template name="DisplayString">
    <xsl:param name="str" />
    <xsl:if test='string-length($str) &gt; 0'>
      <xsl:value-of select="$str" />
    </xsl:if>
  </xsl:template>

  <xsl:template name="HitHighlighting">
    <xsl:param name="hh" />
    <xsl:apply-templates select="$hh"/>
  </xsl:template>

  <xsl:template name="ResultPreviewToolTip">
    <xsl:param name="contentclass" />
    <xsl:param name="picturethumbnailurl" />
    <xsl:param name="url" />
    <xsl:param name="title" />
    <xsl:param name="hithighlightedsummary" />
    <xsl:param name="description" />
    <xsl:param name="version" />

    <xsl:choose>
      <xsl:when test="$contentclass[. = 'STS_ListItem_PictureLibrary'] and $picturethumbnailurl[. != '']">
        <div>
          <a href="{$url}" title="{$title}">
            <img src="{$picturethumbnailurl}" alt="" />
          </a>
        </div>
      </xsl:when>
      <xsl:when test="contains( $url, 'jpg' ) or contains( $url, 'jpeg' ) or contains( $url, 'gif' ) or contains( $url, 'JPG' ) or contains( $url, 'JPEG' ) or contains( $url, 'GIF' )">
        <div>
          <img src="/_layouts/AssetUploader.aspx?Size=Medium&amp;ImageUrl={$url}" alt="" />
        </div>
      </xsl:when>
      <xsl:otherwise>
        <div>
          <xsl:choose>
            <xsl:when test="$hithighlightedsummary[. != '']">
              <b>Preview:</b>
              <br/>
              <xsl:call-template name="HitHighlighting">
                <xsl:with-param name="hh" select="$hithighlightedsummary" />
              </xsl:call-template>
            </xsl:when>
            <xsl:when test="$description[. != '']">
              <b>Preview:</b>
              <br/>
              <xsl:value-of select="$description"/>
            </xsl:when>
            <xsl:otherwise>
              No preview available
            </xsl:otherwise>
          </xsl:choose>
          <xsl:call-template name="DisplayString">
            <xsl:with-param name="str" select="$version" />
            <xsl:with-param name="text" select="'Version: '" />
            <xsl:with-param name="stringcolor" select="'#808080'" />
          </xsl:call-template>

        </div >
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

  <xsl:template match="Result">
    <xsl:variable name="tdClass">
      <xsl:if test="(position() mod 2 = 0)">
        <xsl:value-of select="'even'" />
      </xsl:if>
      <xsl:if test="(position() mod 2 = 1)">
        <xsl:value-of select="'odd'" />
      </xsl:if>
    </xsl:variable>

    <tr>
      <td class="{$tdClass}">
        <a href="#" class="tooltip">
          <img>
            <xsl:attribute name="src">
              <xsl:value-of select="imageurl"/>
            </xsl:attribute>
          </img>
          <span>
            <xsl:call-template name="ResultPreviewToolTip">
              <xsl:with-param name="contentclass" select="contentclass" />
              <xsl:with-param name="description" select="description" />
              <xsl:with-param name="hithighlightedsummary" select="hithighlightedsummary" />
              <xsl:with-param name="picturethumbnailurl" select="picturethumbnailurl" />
              <xsl:with-param name="title" select="title" />
              <xsl:with-param name="url" select="url" />
              <xsl:with-param name="version" select="version" />
            </xsl:call-template>
          </span>
        </a>
      </td>
      <td>
        <a>
          <xsl:attribute name="href">
            <xsl:value-of select="url" disable-output-escaping="yes" />
          </xsl:attribute>
          <xsl:value-of select="filename"/>
        </a>
      </td>
      <td class="{$tdClass}">
        <a>
          <xsl:attribute name="href">
            <xsl:value-of select="url" disable-output-escaping="yes" />
          </xsl:attribute>
          <xsl:choose>
            <xsl:when test="doctitle != ''">
              <xsl:value-of select="doctitle"/>
            </xsl:when>
            <xsl:otherwise>
              <xsl:value-of select="title"/>
            </xsl:otherwise>
          </xsl:choose>
        </a>
      </td>      
      <td class="{$tdClass}">
        <xsl:choose>
          <xsl:when test="docauthor != ''">
            <xsl:value-of select="docauthor"/>
          </xsl:when>
          <xsl:otherwise>
            <xsl:value-of select="author"/>
          </xsl:otherwise>
        </xsl:choose>
      </td>
      <td class="{$tdClass}">
        <xsl:value-of select="revisiondate" />
      </td>
      <td class="{$tdClass}">
        <xsl:value-of select="doclanguage"/>
      </td>
      <td class="{$tdClass}">
        <a>
          <xsl:attribute name="href">
            <xsl:value-of select="sitename" disable-output-escaping="yes" />
          </xsl:attribute>
          <img src="/_layouts/images/breadcrumbbutton.png" style="border-style: none" />
        </a>
        <xsl:call-template name="ShowVersionHistory" />
      </td>
    </tr>

  </xsl:template>

  <xsl:template name="ShowVersionHistory">

    <!-- First, encode Url -->
    <xsl:variable name="EncodedUrl">
      <xsl:value-of disable-output-escaping="yes" select="ddwrt:UrlEncode(url)" />
    </xsl:variable>    

    <!--  does only work for office docuemnts -->
    <xsl:if test="string-length(serverredirectedurl) &gt; 0">

      <!-- get web url from office web app link -->
      <xsl:variable name="WebUrl">
        <xsl:value-of select="substring-before(serverredirectedurl, '_layouts')"/>
      </xsl:variable>

      <!-- create link -->
      <xsl:variable name="FinalLink">
        <xsl:value-of select="$WebUrl"/>
        <xsl:text>_layouts/Versions.aspx?FileName=</xsl:text>
        <xsl:value-of select="$EncodedUrl"/>
      </xsl:variable>

      <a href="{$FinalLink}" target="_blank" Title="Version History">
        <img src="/_layouts/images/versions.gif" style="border-style: none" />
      </a>
    </xsl:if> 

  </xsl:template>

  <xsl:template match="/">

    <table class="searchresult">
      <tr>
        <th width="18"></th>
        <th>Filename</th>
        <th>Title</th>
        <th>Author</th>
        <th>Revision Date</th>
        <th>Language</th>
        <th>Actions</th>
      </tr>
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"                
    xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="TotalResults" />
  <xsl:template match="NumberOfResults" />

  <xsl:template name="DisplayString">
    <xsl:param name="str" />
    <xsl:if test='string-length($str) &gt; 0'>
      <xsl:value-of select="$str" />
    </xsl:if>
  </xsl:template>

  <xsl:template name="HitHighlighting">
    <xsl:param name="hh" />
    <xsl:apply-templates select="$hh"/>
  </xsl:template>

  <xsl:template name="ResultPreviewToolTip">
    <xsl:param name="contentclass" />
    <xsl:param name="picturethumbnailurl" />
    <xsl:param name="url" />
    <xsl:param name="title" />
    <xsl:param name="hithighlightedsummary" />
    <xsl:param name="description" />
    <xsl:param name="version" />

    <xsl:choose>
      <xsl:when test="$contentclass[. = 'STS_ListItem_PictureLibrary'] and $picturethumbnailurl[. != '']">
        <div>
          <a href="{$url}" title="{$title}">
            <img src="{$picturethumbnailurl}" alt="" />
          </a>
        </div>
      </xsl:when>
      <xsl:when test="contains( $url, 'jpg' ) or contains( $url, 'jpeg' ) or contains( $url, 'gif' ) or contains( $url, 'JPG' ) or contains( $url, 'JPEG' ) or contains( $url, 'GIF' )">
        <div>
          <img src="/_layouts/AssetUploader.aspx?Size=Medium&amp;ImageUrl={$url}" alt="" />
        </div>
      </xsl:when>
      <xsl:otherwise>
        <div>
          <xsl:choose>
            <xsl:when test="$hithighlightedsummary[. != '']">
              <b>Preview:</b>
              <br/>
              <xsl:call-template name="HitHighlighting">
                <xsl:with-param name="hh" select="$hithighlightedsummary" />
              </xsl:call-template>
            </xsl:when>
            <xsl:when test="$description[. != '']">
              <b>Preview:</b>
              <br/>
              <xsl:value-of select="$description"/>
            </xsl:when>
            <xsl:otherwise>
              No preview available
            </xsl:otherwise>
          </xsl:choose>
          <xsl:call-template name="DisplayString">
            <xsl:with-param name="str" select="$version" />
            <xsl:with-param name="text" select="'Version: '" />
            <xsl:with-param name="stringcolor" select="'#808080'" />
          </xsl:call-template>

        </div >
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

  <xsl:template match="Result">
    <xsl:variable name="tdClass">
      <xsl:if test="(position() mod 2 = 0)">
        <xsl:value-of select="'even'" />
      </xsl:if>
      <xsl:if test="(position() mod 2 = 1)">
        <xsl:value-of select="'odd'" />
      </xsl:if>
    </xsl:variable>

    <tr>
      <td class="{$tdClass}">
        <a href="#" class="tooltip">
          <img>
            <xsl:attribute name="src">
              <xsl:value-of select="imageurl"/>
            </xsl:attribute>
          </img>
          <span>
            <xsl:call-template name="ResultPreviewToolTip">
              <xsl:with-param name="contentclass" select="contentclass" />
              <xsl:with-param name="description" select="description" />
              <xsl:with-param name="hithighlightedsummary" select="hithighlightedsummary" />
              <xsl:with-param name="picturethumbnailurl" select="picturethumbnailurl" />
              <xsl:with-param name="title" select="title" />
              <xsl:with-param name="url" select="url" />
              <xsl:with-param name="version" select="version" />
            </xsl:call-template>
          </span>
        </a>
      </td>
      <td>
        <a>
          <xsl:attribute name="href">
            <xsl:value-of select="url" disable-output-escaping="yes" />
          </xsl:attribute>
          <xsl:value-of select="filename"/>
        </a>
      </td>
      <td class="{$tdClass}">
        <a>
          <xsl:attribute name="href">
            <xsl:value-of select="url" disable-output-escaping="yes" />
          </xsl:attribute>
          <xsl:choose>
            <xsl:when test="doctitle != ''">
              <xsl:value-of select="doctitle"/>
            </xsl:when>
            <xsl:otherwise>
              <xsl:value-of select="title"/>
            </xsl:otherwise>
          </xsl:choose>
        </a>
      </td>      
      <td class="{$tdClass}">
        <xsl:choose>
          <xsl:when test="docauthor != ''">
            <xsl:value-of select="docauthor"/>
          </xsl:when>
          <xsl:otherwise>
            <xsl:value-of select="author"/>
          </xsl:otherwise>
        </xsl:choose>
      </td>
      <td class="{$tdClass}">
        <xsl:value-of select="revisiondate" />
      </td>
      <td class="{$tdClass}">
        <xsl:value-of select="doclanguage"/>
      </td>
      <td class="{$tdClass}">
        <a>
          <xsl:attribute name="href">
            <xsl:value-of select="sitename" disable-output-escaping="yes" />
          </xsl:attribute>
          <img src="/_layouts/images/breadcrumbbutton.png" style="border-style: none" />
        </a>
        <xsl:call-template name="ShowVersionHistory" />
      </td>
    </tr>

  </xsl:template>

  <xsl:template name="ShowVersionHistory">

    <!-- First, encode Url -->
    <xsl:variable name="EncodedUrl">
      <xsl:value-of disable-output-escaping="yes" select="ddwrt:UrlEncode(url)" />
    </xsl:variable>    

    <!--  does only work for office docuemnts -->
    <xsl:if test="string-length(serverredirectedurl) &gt; 0">

      <!-- get web url from office web app link -->
      <xsl:variable name="WebUrl">
        <xsl:value-of select="substring-before(serverredirectedurl, '_layouts')"/>
      </xsl:variable>

      <!-- create link -->
      <xsl:variable name="FinalLink">
        <xsl:value-of select="$WebUrl"/>
        <xsl:text>_layouts/Versions.aspx?FileName=</xsl:text>
        <xsl:value-of select="$EncodedUrl"/>
      </xsl:variable>

      <a href="{$FinalLink}" target="_blank" Title="Version History">
        <img src="/_layouts/images/versions.gif" style="border-style: none" />
      </a>
    </xsl:if> 

  </xsl:template>

  <xsl:template match="/">

    <table class="searchresult">
      <tr>
        <th width="18"></th>
        <th>Filename</th>
        <th>Title</th>
        <th>Author</th>
        <th>Revision Date</th>
        <th>Language</th>
        <th>Actions</th>
      </tr>

      <xsl:apply-templates /> 
    </table>
  </xsl:template>
</xsl:stylesheet>

1 个答案:

答案 0 :(得分:0)

您必须添加<xsl:sort>(请参阅:w3schools: xsl:sort Element)。 它应该添加到您的xsl:apply-templates元素中(或者如果您使用xsl:for-each,那么就会添加。)