我正在尝试按照W3Schools和其他网站上的说明将xsl样式表应用于我的xml文件,但我对此遇到的问题感到困惑。我有多个模板,基本的工作正常,但表格很复杂。我的标题正在为每一行重复,显然是为每一行创建新表。下面是一个小样本。有人能告诉我哪里出错了吗?
XSL
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<body>
<h2>Site Visit Form</h2>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="SiteVisitForm">
<p>
<xsl:apply-templates select="SiteVisit"/>
<xsl:apply-templates select="field"/>
</p>
</xsl:template>
<xsl:template match="SiteVisit">
<p>
Site Visit Code: <span style="color:#ff0000">
<xsl:value-of select="SiteVisitCode"/>
</span>
Project ID: <span style="color:#ff0000">
<xsl:value-of select="Project_ID"/>
<xsl:value-of select="NewProject"/>
</span>
<br />
Personnel:<span style="color:#ff0000">
<xsl:value-of select="Personnel"/>
</span>
</p>
</xsl:template>
<xsl:template match="field">
<table border="1">
<tr bgcolor="#9acd32">
<th>Charactistic Name</th>
<th>Result Value</th>
<th>Unit</th>
<th>Analytical Method</th>
<th>Result Comment</th>
</tr>
<tr>
<td><xsl:value-of select="Characteristic_Name"/></td>
<td><xsl:value-of select="Result_Value"/></td>
<td><xsl:value-of select="Result_Value_Unit"/></td>
<td><xsl:value-of select="Analytical_Method"/></td>
<td><xsl:value-of select="Result_Comment"/></td>
</tr>
</table>
</xsl:template>
XML
<SiteVisit>
<SiteVisitCode>Test</SiteVisitCode>
<Project_ID>FLAT-STILL-TPA</Project_ID>
<NewProject></NewProject>
<Personnel>Andersen, Laura,Apfelbeck, Randy,Arroues, Pamela</Personnel>
</siteVisit>
<field>
<Characteristic_Name>Temperature, water</Characteristic_Name>
<Result_Value>12</Result_Value>
<Result_Value_Unit>deg C</Result_Value_Unit>
</field>
<field>
<Characteristic_Name>Temperature, air</Characteristic_Name>
<Result_Value>60</Result_Value>
<Result_Value_Unit>deg F</Result_Value_Unit>
</field>
<field>
<Characteristic_Name>Specific conductance</Characteristic_Name>
<Result_Value>122</Result_Value>
<Result_Value_Unit>uS/cm</Result_Value_Unit>
</field>
<field>
<Characteristic_Name>pH</Characteristic_Name>
<Result_Value>123</Result_Value>
<Result_Value_Unit>None</Result_Value_Unit>
</field>
答案 0 :(得分:1)
您必须在模板中为“SiteVisitForm”声明“table”和“tr”一次,并在定义“tr”后为“field”应用模板:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:strip-space elements="*"/>
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<body>
<h2>Site Visit Form</h2>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="SiteVisitForm">
<p>
<xsl:apply-templates select="SiteVisit"/>
<table border="1">
<tr bgcolor="#9acd32">
<th>Charactistic Name</th>
<th>Result Value</th>
<th>Unit</th>
<th>Analytical Method</th>
<th>Result Comment</th>
</tr>
<xsl:apply-templates select="field"/>
</table>
</p>
</xsl:template>
<xsl:template match="SiteVisit">
<p>
Site Visit Code: <span style="color:#ff0000">
<xsl:value-of select="SiteVisitCode"/>
</span>
Project ID: <span style="color:#ff0000">
<xsl:value-of select="Project_ID"/>
<xsl:value-of select="NewProject"/>
</span>
<br />
Personnel:<span style="color:#ff0000">
<xsl:value-of select="Personnel"/>
</span>
</p>
</xsl:template>
<xsl:template match="field">
<tr>
<td>
<xsl:value-of select="Characteristic_Name"/>
</td>
<td>
<xsl:value-of select="Result_Value"/>
</td>
<td>
<xsl:value-of select="Result_Value_Unit"/>
</td>
<td>
<xsl:value-of select="Analytical_Method"/>
</td>
<td>
<xsl:value-of select="Result_Comment"/>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>