给出以下xml:
<student studentID="001">
<dateOfBirth> 1-1-1990 </dateOfBirth>
<name> Ayse Ozer </name>
<sex> F </sex>
<takes> CMPE351 </takes>
<takes> CMPE111 </takes>
<takes> CMPE418 </takes>
</student>
<student studentID="002">
<dateOfBirth> 2-2-1992 </dateOfBirth>
<name> Bircan Korkmaz </name>
<sex> F </sex>
<takes> CMPE418 </takes>
<takes> CMPE111 </takes>
<takes> CMPE352 </takes>
</student>
<course courseCode="CMPE351">
<courseName>
Database systems I
</courseName>
<description>
First course in databases
</description>
</course>
<course courseCode="CMPE111">
<courseName>
Introduction to C
</courseName>
<description>
First course in programming
</description>
</course>
<course courseCode="CMPE352">
<courseName>
Database systems II
</courseName>
<description>
Second course in databases
</description>
</course>
<course courseCode="CMPE418">
<courseName>
Internet Programming
</courseName>
<description>
Programming for the Internet.
</description>
</course>
我想要那样的输出
学生的课程:
* Ayse Ozer
o CMPE351 Database systems I
o CMPE111 Introduction to C
* Bircan Korkmaz
o CMPE418 Internet Programming
o CMPE111 Introduction to C
我写了这个xsl代码:
<xsl:template match = "school">
<head>
<title>Student</title>
</head>
<body>
<p>Courses Taken By Students:</p>
<xsl:for-each select = "student">
<ul>
<li><xsl:value-of select = "name"/> </li>
<xsl:for-each select = "takes">
<ul>
<li><xsl:value-of select="text()" />
<xsl:value-of select = "../../course[@courseCode=text()]/courseName"/> </li>
</ul>
</xsl:for-each>
</ul>
</xsl:for-each>
</body>
</xsl:template>
<xsl:value-of select = "../../course[@courseCode=text()]/courseName"/>
Problem about above line about text()
答案 0 :(得分:1)
问题是空白:
<takes> CMPE351 </takes>
应该是:
<takes>CMPE351</takes>
我会尽力弥补......路上的例子...... 为了避免很多问题(并提高性能),我还将使用xsl索引......
修正(警告 - 它不适用于在中间中有多个空格的课程代码,但这似乎不太可能):
<xsl:variable name="code" select="normalize-space()"/>
<ul>
<li>
<xsl:value-of select="$code"/>
<xsl:value-of select="key('courses',$code)/courseName"/>
</li>
</ul>
(在顶部)xsl索引:
<xsl:key name="courses" match="/school/course" use="@courseCode"/>
答案 1 :(得分:0)
在你已经得到一个好答案之前,我已经开始研究这个例子了。由于这只是一种略微不同的方法,我认为无论如何我都会发布它。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="no" encoding="UTF-8" omit-xml-declaration="yes" />
<xsl:key name="courses" match="course" use="@courseCode"/>
<xsl:template match="school">
<html>
<body>
<p>Courses taken by:</p>
<ul>
<xsl:apply-templates select="student"/>
</ul>
</body>
</html>
</xsl:template>
<xsl:template match="student">
<li>
<xsl:value-of select="name"/>
<ul>
<xsl:apply-templates select="takes"/>
</ul>
</li>
</xsl:template>
<xsl:template match="takes">
<li>
<xsl:value-of select="."/>
<xsl:value-of select="key('courses', normalize-space(.))/courseName"/>
</li>
</xsl:template>
</xsl:stylesheet>