我试图改变页面上某些元素的顺序。
http://ccri.edu/laws/faculty_staff/
如果你点击了#34;完整列表"你会注意到按钮,订单是兼职教师,工作人员,教师...我试图让它显示教师,兼职教师,工作人员。
教职员工工作人员从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@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@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()"/>: </span>
<xsl:for-each select="current-group()">
<xsl:choose>
<xsl:when test="position() != last()">
<xsl:value-of select="concat(Name/First, ' ', Name/Last)"/>,
</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()"/>: </span>
<xsl:for-each select="current-group()">
<xsl:choose>
<xsl:when test="position() != last()">
<xsl:value-of select="concat(Name/First, ' ', Name/Last)"/>,
</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我只是为了确定要编辑的内容。有任何想法吗?谢谢!
答案 0 :(得分:1)
处理组的顺序由xsl:for-each-group
的xsl:sort子项确定<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
中调用index-of,但这会给出一些抽象。