XSLT从XML文件创建表。将多个值放入表';s细胞
这是学校的一个项目,我大部分时间都在那里。我需要重新创建此PDF文档的左表: 我遇到的问题是在一个单元格中放置多个备用项。它只从XML文件中获取第一个备用元素。以下是我的代码: xsl:XSLT从XML文件创建表。将多个值放入表';s细胞,xml,xslt,html-table,cell,Xml,Xslt,Html Table,Cell,这是学校的一个项目,我大部分时间都在那里。我需要重新创建此PDF文档的左表: 我遇到的问题是在一个单元格中放置多个备用项。它只从XML文件中获取第一个备用元素。以下是我的代码: xsl: 课程登记表 CRN# 课程编号(英语100) 第(0W1)节 标题 信用 交替 总学分 xml: 10000 英语100 0W1 英语简介 3. 10001 历史100 0W2 历史简介 3. 10011 10002 数学100 0W3 代数入门 4. 10012 10022 10003 BSAD 100
课程登记表
CRN#
课程编号(英语100)
第(0W1)节
标题
信用
交替
总学分
xml:
10000
英语100
0W1
英语简介
3.
10001
历史100
0W2
历史简介
3.
10011
10002
数学100
0W3
代数入门
4.
10012
10022
10003
BSAD 100
0W4
商业介绍
3.
10013
10023
10033
DTD:
我希望它做的是创建表,如果XML文件中有多个备用元素,它将把这些元素与其他备用元素放在同一个单元格中。任何建议或想法都很好 这是因为您使用的是
xsl:value of
。在XSLT1.0中,这只返回第一个匹配项
尝试改用xsl:apply templates
并为备选方案添加模板
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" version="4.0" />
<xsl:template match="/">
<html>
<head>
<title>Course Registration Form</title>
</head>
<body>
<table border="1">
<tr>
<th>CRN#</th>
<th>Course Number (ENGS 100)</th>
<th>Section (0W1)</th>
<th>Title</th>
<th>Credits</th>
<th>Alternates</th>
</tr>
<xsl:for-each select="/schedule/class">
<xsl:sort select="crn" />
<tr>
<td><xsl:value-of select="crn" /></td>
<td><xsl:value-of select="coursenumber" /></td>
<td><xsl:value-of select="section" /></td>
<td><xsl:value-of select="title" /></td>
<td><xsl:value-of select="credits" /></td>
<td><xsl:apply-templates select="alternates" /></td>
</tr>
</xsl:for-each>
<tr>
<td></td>
<td></td>
<td></td>
<td><b>Total Credits</b></td>
<td><xsl:value-of select="sum(/schedule/class/credits)"/></td>
<td></td>
</tr>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="alternates">
<xsl:if test="not(position()=1)"><br/></xsl:if>
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>
课程登记表
CRN#
课程编号(英语100)
第(0W1)节
标题
信用
交替
总学分
使用xsl:apply templates
并用其他模板覆盖默认模板(推送方法)将更易于管理和扩展。如果您的样式表复杂得多,您可能需要考虑更新样式表的其余部分。您的DTD指定零或一个代码>交替< /COD>元素,但是您的XML有多个。这是无效的(浏览器不会告诉你的)。谢谢,伙计,这很好用!我将更多地研究将来使用的模板。
<!DOCTYPE library SYSTEM "schedule.dtd">
<?xml-stylesheet type="text/xsl" href="schedule.xsl" ?>
<schedule>
<class>
<crn>10000</crn>
<coursenumber>ENGS 100</coursenumber>
<section>0W1</section>
<title>Intro to English</title>
<credits>3</credits>
</class>
<class>
<crn>10001</crn>
<coursenumber>HIST 100</coursenumber>
<section>0W2</section>
<title>Intro to History</title>
<credits>3</credits>
<alternates>10011</alternates>
</class>
<class>
<crn>10002</crn>
<coursenumber>MATH 100</coursenumber>
<section>0W3</section>
<title>Intro to Algebra</title>
<credits>4</credits>
<alternates>10012</alternates>
<alternates>10022</alternates>
</class>
<class>
<crn>10003</crn>
<coursenumber>BSAD 100</coursenumber>
<section>0W4</section>
<title>Intro to Business</title>
<credits>3</credits>
<alternates>10013</alternates>
<alternates>10023</alternates>
<alternates>10033</alternates>
</class>
</schedule>
<!ELEMENT schedule (class+)>
<!ELEMENT class (crn, coursenumber, section, title, credits, alternates?)>
<!ELEMENT crn (#PCDATA)>
<!ELEMENT coursenumber (#PCDATA)>
<!ELEMENT section (#PCDATA)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT credits (#PCDATA)>
<!ELEMENT alternates (#PCDATA)>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" version="4.0" />
<xsl:template match="/">
<html>
<head>
<title>Course Registration Form</title>
</head>
<body>
<table border="1">
<tr>
<th>CRN#</th>
<th>Course Number (ENGS 100)</th>
<th>Section (0W1)</th>
<th>Title</th>
<th>Credits</th>
<th>Alternates</th>
</tr>
<xsl:for-each select="/schedule/class">
<xsl:sort select="crn" />
<tr>
<td><xsl:value-of select="crn" /></td>
<td><xsl:value-of select="coursenumber" /></td>
<td><xsl:value-of select="section" /></td>
<td><xsl:value-of select="title" /></td>
<td><xsl:value-of select="credits" /></td>
<td><xsl:apply-templates select="alternates" /></td>
</tr>
</xsl:for-each>
<tr>
<td></td>
<td></td>
<td></td>
<td><b>Total Credits</b></td>
<td><xsl:value-of select="sum(/schedule/class/credits)"/></td>
<td></td>
</tr>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="alternates">
<xsl:if test="not(position()=1)"><br/></xsl:if>
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>