xsl模板表问题

时间:2014-03-24 17:00:27

标签: xml xslt

我正在尝试按照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>

1 个答案:

答案 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>