2016-11-15 43 views
0

我正在嘗試更改頁面上某些元素的順序。如何分類XSL?

http://ccri.edu/laws/faculty_staff/

,如果你點擊「完成列表」按鈕的順序是兼任教師,教職員工你會發現......我試圖得到它顯示教師,兼職教師,工作人員。

教職員&工作人員拉入頁從XML表看起來像這樣

<Persons> 
    <Person> 
    <Name><Last>Abatiello</Last> 
    <First>Steven</First></Name> 
    <Role>Staff</Role> 
    <Title>Assistant Coordinator</Title> 
    <Department>Student Success Center</Department> 
    <Campus>Liston Campus</Campus> 
    <Office>2236</Office> 
    <Email>smabatiello&#64;ccri.edu</Email> 
    <Telephone>555-5555</Telephone> 
    <Website></Website> 
    </Person> 
    <Person> 
    <Name><Last>Abbate</Last> 
    <First>Maureen</First></Name> 
    <Role>Faculty</Role> 
    <Title>Professor</Title> 
    <Department>English</Department> 
    <Campus>Liston Campus</Campus> 
    <Office></Office> 
    <Email>bate&#64;ccri.edu</Email> 
    <Telephone>555-5555</Telephone> 
    <Website></Website> 
    </Person> 
</persons> 

配對使用XSL來顯示它

<xsl:when test="$department-filter != ''"> 
    <xsl:for-each-group select="$doc/Persons/Person[lower-case(Department) = tokenize(lower-case($department-filter),',')]" group-by="Role"> 
    <p><span class="facultyheader"><xsl:value-of select="current-grouping-key()"/>:&nbsp;</span> 
     <xsl:for-each select="current-group()"> 
     <xsl:choose> 
      <xsl:when test="position() != last()"> 
      <xsl:value-of select="concat(Name/First, ' ', Name/Last)"/>,&nbsp; 
      </xsl:when> 
      <xsl:otherwise> 
      <xsl:value-of select="concat(Name/First, ' ', Name/Last)"/> 
      </xsl:otherwise> 
     </xsl:choose> 
     </xsl:for-each> 
    </p> 
    </xsl:for-each-group> 
</xsl:when> 
<xsl:otherwise> 
    <xsl:for-each-group select="$doc/Persons/Person" group-by="Role"> 
    <p><span class="facultyheader"><xsl:value-of select="current-grouping-key()"/>:&nbsp;</span> 
     <xsl:for-each select="current-group()"> 
     <xsl:choose> 
      <xsl:when test="position() != last()"> 
      <xsl:value-of select="concat(Name/First, ' ', Name/Last)"/>,&nbsp; 
      </xsl:when> 
      <xsl:otherwise> 
      <xsl:value-of select="concat(Name/First, ' ', Name/Last)"/> 
      </xsl:otherwise> 
     </xsl:choose> 
     </xsl:for-each> 
    </p> 
    </xsl:for-each-group> 
</xsl:otherwise> 
</xsl:choose> 

所以現在它正在按字母順序排序。 ..我知道我必須編輯XSL我只是要確定要編輯的內容。有任何想法嗎?謝謝!

回答

1

在組處理由XSL確定的順序:XSL​​的排序子:對,每個組

<xsl:for-each-group select="..." group-by="Role"> 
    <xsl:sort select="...."/> 

剩下的什麼樣的鍵使用的問題。對於這種事情最好的辦法是有一個功能:

<xsl:function name="f:role-rank" as="xs:integer"> 
    <xsl:param name="role" as="xs:string"/> 
    <xsl:sequence select="index-of(('Faculty', 'Adjunct-Faculty', 'Staff'), $role)"/> 
</xsl:function> 

然後

<xsl:sort select="f:role-rank(current-grouping-key())"/> 

你也可以調用在xsl:sort/@select指數的直接,但是這給了抽象的一點點。

+0

HI Michael,非常感謝!雖然我不確定我會將該代碼插入到當前代碼中。我想我知道在哪裏放置函數,但不知道實際的xsl:sort標記。我將如何將它融入我當前的代碼?再次感謝! – dbaker6

+0

正如我所說的,xsl:sort應該是xsl; for-each-group的第一個孩子。 –

+0

我收到一個錯誤「變換過程中的問題:調用的結果不允許空序列」任何想法?再次感謝! – dbaker6