我对xml和xslt完全陌生,所以首先,如果这是一个非常简单的问题,或者已经在其他地方回答了,但我很不明白,因为我还没有掌握语法。
我正在尝试创建一个表,该表从SQL数据库中提取4所房屋的名称并将它们显示在表中。不幸的是,我的代码为每个房子创建了一个新表。如何将它们全部放入同一个表中?
我已经尝试了排序,但由于我是全新的,我不确定哪一行代码可能会有所帮助。我从其他几个例子中拼凑出来。
XSL:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<view>
<name> Junior School Houses</name>
<template type="xsl">
<xsl>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml">
<xsl:template match="row">
<STYLE>
H2 {font-family: calibri;}
P {font-family:calibri;}
table {border = 0;
width:100%;}
TD, TH {font-family: calibri;
width: 33%;
text-align: left;}
</STYLE>
<h2>Junior School Houses</h2>
<table border="1">
<tr bgcolor="#c8c8c8">
<th>   Academic House   </th>
</tr>
<tr>
<td> <xsl:value-of select="cell[@name='txtAcademicHouse']" />
</td>
</tr>
</table>
</xsl:template>
</xsl:stylesheet>
</xsl>
</template>
</view>
.XML
<source name="Junior School Houses" friendlyName="Junior School - Houses">
<connectionString>database=iSams;server=#####;user
id=#####;pwd=########;Max Pool Size=100;Connection
Lifetime=0</connectionString>
<queryString>
<![CDATA[
--All House Points this week
SELECT txtAcademicHouse
FROM TblPupilManagementPupils
]]>
</queryString>
<readGroup>SPECIAL:EVERYBODY </readGroup>
<publishGroup>##########################</publishGroup>
</source>
它目前显示标题"小学宿舍",然后是 2 x 1 的表格,顶部是"学术之家",然后是下面的第一个房子。
相同的标题和 2by1 表组合重复 3 次,其他 3 个房屋列在相应表的底部单元格中。我需要它是一个标题,然后是一个 5 x 1 的表格,顶部是"学术之家",下面列出了 4 个房子。
谢谢。
您的 XSLT 有点令人困惑,因为xsl:stylesheet
实际上应该是顶级元素,所以我假设您正在使用某种应用程序/框架来处理执行 SQL 并将结果作为 XML 传递给 XSLT。
但是假设从SQL生成的XML是这样的......
<data>
<row>
<cell name="txtAcademicHouse">House 1</cell>
</row>
<row>
<cell name="txtAcademicHouse">House 2</cell>
</row>
</data>
然后,XSLT 中发生的情况是,模板为每个row
应用一次,并且由于存在多行,因此会生成多个单独的表。
您实际上应该有两个模板。一个模板匹配文档节点以生成单个表,然后另一个匹配row
仅输出表行。像这样:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml">
<xsl:template match="/">
<STYLE>
H2 {font-family: calibri;}
P {font-family:calibri;}
table {border = 0;
width:100%;}
TD, TH {font-family: calibri;
width: 33%;
text-align: left;}
</STYLE>
<h2>Junior School Houses</h2>
<table border="1">
<tr bgcolor="#c8c8c8">
<th>   Academic House   </th>
</tr>
<xsl:apply-templates select="//row" />
</table>
</xsl:template>
<xsl:template match="row">
<tr>
<td>
<xsl:value-of select="cell[@name='txtAcademicHouse']" />
</td>
</tr>
</xsl:template>
</xsl:stylesheet>