2010-07-06 4 views
0

Я использую метод Muenchian для группировки данных из моего документа xml с Marc's solution, и я стараюсь сортировать данные в каждой группе без особого успеха.XSLT Сортировка с

Я попытался следующие, но не сортировка не выполняется:

заменен:

<xsl:value-of select="MemberLastName"/> 

с

<xsl:apply-templates select="MemberLastName" > 
    <xsl:sort order="ascending" /> 
</xsl:apply-templates> 

Я также попытался следующие, но данные в настоящее время выводится как обычный текст и не сортируется

<xsl:template match="/NewDataSet/QueryResultData"> 
    <xsl:apply-templates> 
     <xsl:sort select="MemberLastName"/> 
    <xsl:sort select="MemberFirstName"/> 
    </xsl:apply-templates> 
    </xsl:template> 

с:

<xsl:apply-templates select="MemberLastName"/> 

вот мой полный код:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="msxsl" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 


    <xsl:output method="xml" indent="yes"/>  
    <xsl:key name="groups" match="/NewDataSet/QueryResultData" use="MemberReportGroup4Description" /> 

    <xsl:template match="/NewDataSet"> 
    <xsl:apply-templates select="QueryResultData[generate-id() = generate-id(key('groups', MemberReportGroup4Description)[1])]"/> 
    </xsl:template> 

    <xsl:template name="formatDate"> 
    <xsl:param name="dateTime" /> 
    <xsl:variable name="date" select="substring-before($dateTime, 'T')" /> 
    <xsl:variable name="year" select="substring-before($date, '-')" /> 
    <xsl:variable name="month" select="substring-before(substring-after($date, '-'), '-')" /> 
    <xsl:variable name="day" select="substring-after(substring-after($date, '-'), '-')" /> 
    <xsl:value-of select="concat($month, '/', $day, '/', $year)" /> 
    </xsl:template> 

    <xsl:template name="formatCourse"> 
    <xsl:param name="courseTitle" /> 
    <xsl:variable name="course" select="substring-after($courseTitle, '|')" /> 
    <xsl:value-of select='$course' /> 
    </xsl:template> 

    <xsl:template name="organizationName"> 
    <xsl:param name="orgName" /> 
    <xsl:value-of select='$orgName' /> 
    </xsl:template> 

    <xsl:template match="/NewDataSet/QueryResultData"> 
    <xsl:apply-templates> 
     <xsl:sort select="MemberLastName"/> 
     <xsl:sort select="MemberFirstName"/> 
    </xsl:apply-templates> 
    </xsl:template> 






    <xsl:template name="QueryResultData" match="QueryResultData"> 

    <style type="text/css"> 
th { text-align:left; font-weight:bold;} 

#stores 
{ 
font-family:"Arial", Helvetica, sans-serif; 
width:600px; 
border-collapse:collapse; 
padding: 5px; 
} 
#stores td, #stores th 
{ 
font-size:8pt; 
border:1px solid #C8EAC8; 
padding:3px 7px 2px 7px; 
} 
#stores th 
{ 
font-size:8pt; 
text-align:left; 
padding-top:5px; 
padding-bottom:4px; 
background-color:#339933; 
color:#fff; 
} 
.odd 
{ 
color:#000; 
background-color:#ECF8EC; 
} 
h1.store { font-family: Arial, Helvetica, sans-serif; font-size: 18px; color: #000099; font-weight:bold; margin-bottom:-2px;} 

.CenterText { text-align:center !important; } 
</style> 


    <h1 class="store"> 
     <xsl:call-template name="organizationName"> 
      <xsl:with-param name="orgName" select="/NewDataSet/MetaData/OrganizationName" /> 
     </xsl:call-template>, #<xsl:value-of select="MemberReportGroup4Description"/></h1> 
    <table id="stores"> 
     <tr class="heading"> 
     <th scope="col">Learner</th> 
     <th scope="col">Course</th> 
     <th scope="col">Enrollment Date</th> 
     <th scope="col" class="CenterText">Viewed %</th> 
     </tr> 
     <xsl:for-each select="key('groups', MemberReportGroup4Description)"> 
     <tr> 
      <xsl:if test="position() mod 2 = 1"> 
      <xsl:attribute name="class">odd</xsl:attribute> 
      </xsl:if> 
      <td> 
      <xsl:value-of select="MemberLastName"/>, <xsl:value-of select="MemberFirstName"/> 
      </td> 
      <td> 
      <xsl:call-template name="formatCourse"> 
       <xsl:with-param name="courseTitle" select="SortPrefixAndTitle" /> 
      </xsl:call-template> 
      </td> 
      <td> 
      <xsl:call-template name="formatDate"> 
       <xsl:with-param name="dateTime" select="EnrollmentDate" /> 
      </xsl:call-template> 
      </td> 
      <td class="CenterText"> 
      <xsl:value-of select="ViewedPercentage"/> 
      </td> 
     </tr> 
     </xsl:for-each> 
    </table> 
    </xsl:template> 
</xsl:stylesheet> 
+0

Добавить некоторый документ ввода. Тот, который вы связываете, не имеет элемента QueryResultData'. – 2010-07-06 22:11:58

+0

Я думаю, что знаю проблему, но я не собираюсь ее догадываться. Пожалуйста, добавьте ввод. – 2010-07-06 23:13:41

+0

"XSLT Сортировка с" - с ** какой **? –

ответ

1

Не изменяйте <xsl:value-of select="MemberLastName"/>. Вместо этого просто поместите элемент сортировки над ним, как раз под полем :

<xsl:for-each select="key('groups', MemberReportGroup4Description)"> 
    <xsl:sort select="MemberLastName"/> 
    <xsl:sort select="MemberFirstName"/> 
    <tr> 
     <xsl:if test="position() mod 2 = 1"> 
     <xsl:attribute name="class">odd</xsl:attribute> 
     </xsl:if> 
     <td> 
     <xsl:value-of select="MemberLastName"/>, <xsl:value-of select="MemberFirstName"/> 
     </td> 
     ... 
    </tr> 
    </xsl:for-each> 
+0

Спасибо Оуэн! Отлично. – Neil

Смежные вопросы