lecturer.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="html" version="4.0"/>
<xsl:template match="/">
<html>
<head>
<title>Lecturer Information</title>
</head>
<body>
<table border="1">
<tr bgcolor="#9acd32">
<th>Name</th>
<th>Teaching</th>
<th>Research</th>
</tr>
<xsl:for-each select="lecturers/lecturer">
<tr>
<td>
<xsl:apply-templates select="name">
<xsl:sort select="@last" data-type="text" order="descending"/>
</xsl:apply-templates>
</td>
<td><xsl:apply-templates select="teaching/course" /></td>
<td><xsl:value-of select="research"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
<!-- Templates HERE -->
<xsl:template match="name">
<xsl:value-of select="@title"/><xsl:text> </xsl:text>
<xsl:value-of select="@first"/><xsl:text> </xsl:text>
<xsl:value-of select="@last"/>
</xsl:template>
<xsl:template match="teaching/course">
<xsl:for-each select=".">
<xsl:value-of select="concat(. , '(',@code, ')')"/> <br />
<!-- <xsl:value-of select="."/> (<xsl:value-of select="@code"/>) -->
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>lecturer.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="lecturer.xsl" ?>
<!DOCTYPE lecturers [
<!ELEMENT lecturers (lecturer+)>
<!ELEMENT lecturer (name, teaching, research)>
<!-- Element name must contain attribute title, first and last -->
<!ELEMENT name (#PCDATA)>
<!ATTLIST name
title CDATA #REQUIRED
first CDATA #REQUIRED
last CDATA #REQUIRED
>
<!-- Teaching can have more than one course-->
<!ELEMENT teaching (course+)>
<!ELEMENT course (#PCDATA)>
<!ATTLIST course
code CDATA #REQUIRED
>
<!ELEMENT research (#PCDATA)>
]>
<lecturers>
<lecturer>
<name title="Professor" first="Peter" last="Quirk"/>
<teaching>
<course code="CO3070">XML and the Web</course>
<course code="CO3300">Web Server Architectures</course>
</teaching>
<research>
The application of Web protocols to Biology
</research>
</lecturer>
<lecturer>
<name title="Mr" last="Abdi" first="Ahmet"/>
<teaching>
<course code="CO1337">Ahmet's Course</course>
</teaching>
<research>
The Best Research In the world.
</research>
</lecturer>
</lecturers>该xsl的这一部分似乎没有排序。
<xsl:sort select="@last" data-type="text" order="descending"/>发布于 2012-11-21 14:31:25
<xsl:sort>元素作为<xsl:apply-templates select="name">的子元素,但是不需要在那里排序,因为在给定的上下文中只有一个名称。
相反,您需要使<xsl:sort>成为<xsl:for-each>的子级。
<xsl:sort select="name/@last" data-type="text" order="descending"/>确保如所示更改select属性,以便排序能够从<lecturer>元素的上下文中找到姓氏。
发布于 2012-11-21 14:30:07
我相信这条线
<xsl:sort select="name/@last" data-type="text" order="descending"/>需要就在for-each语句下面
<xsl:for-each select="lecturers/lecturer">这应该是你所有讲师的姓排序。
https://stackoverflow.com/questions/13495018
复制相似问题