Asp.net 如何使用XSLT向表中添加一个额外的行?

Asp.net 如何使用XSLT向表中添加一个额外的行?,asp.net,xslt,xslt-1.0,Asp.net,Xslt,Xslt 1.0,我们有ASP.NET应用程序,并使用XSLT生成表,其结构如下所示: <xsl:template match="Tickets2/Item"> <tr class="tdNewDesign"> <xsl:choose> <xsl:when test="OddEven = 'Odd'"> <td bgcolor="#FFFFFF" class="text" style="border-left: 1px

我们有ASP.NET应用程序,并使用XSLT生成表,其结构如下所示:

<xsl:template match="Tickets2/Item">
  <tr class="tdNewDesign">
    <xsl:choose>
      <xsl:when test="OddEven = 'Odd'">
        <td bgcolor="#FFFFFF" class="text" style="border-left: 1px dashed #AAA;">
          <xsl:value-of select="Seats" />
        </td>
        <td bgcolor="#FFFFFF" class="text" style="border-left: 1px dashed #AAA;">
          <xsl:value-of select="SeatType" />
        </td>
        <td bgcolor="#FFFFFF" class="text" style="border-left: 1px dashed #AAA;">
          <xsl:value-of select="RowNumber" />
        </td>
        <td bgcolor="#FFFFFF" class="text" style="border-left: 1px dashed #AAA;">
          <xsl:value-of select="SeatNumber" />
        </td>
        <td bgcolor="#FFFFFF" class="text" style="border-left: 1px dashed #AAA;">
          <xsl:value-of select="Price" />
        </td>
        <td bgcolor="#FFFFFF" class="text" style="border-left: 1px dashed #AAA;">
          <input type="checkbox" name="Ticket">
            <xsl:attribute name="value">
              <xsl:value-of select="TicketID" />
            </xsl:attribute>
            <xsl:if test="Selected = 'checked'">
              <xsl:attribute name="checked">checked</xsl:attribute>
            </xsl:if>
          </input>
        </td>
        <td bgcolor="#FFFFFF" class="text" style="border-left: 1px dashed #AAA; border-right: 1px dashed #AAA;">
          <xsl:choose>
            <xsl:when test="ReservType = 1">
              <xsl:value-of select="Price*ReservAmount*0.01" />руб.
            </xsl:when>
            <xsl:otherwise>
              <xsl:value-of select="ReservInfo" />
            </xsl:otherwise>
          </xsl:choose>
        </td>
      </xsl:when>
      <xsl:when test="OddEven = 'Even'">
        <td bgcolor="#fcfae0" class="text" style="border-left: 1px dashed #AAA;">
          <xsl:value-of select="Seats" />
        </td>
        <td bgcolor="#fcfae0" class="text" style="border-left: 1px dashed #AAA;">
          <xsl:value-of select="SeatType" />
        </td>
        <td bgcolor="#fcfae0" class="text" style="border-left: 1px dashed #AAA;">
          <xsl:value-of select="RowNumber" />
        </td>
        <td bgcolor="#fcfae0" class="text" style="border-left: 1px dashed #AAA;">
          <xsl:value-of select="SeatNumber" />
        </td>
        <td bgcolor="#fcfae0" class="text" style="border-left: 1px dashed #AAA;">
          <xsl:value-of select="Price" />
        </td>
        <td bgcolor="#fcfae0" class="text" style="border-left: 1px dashed #AAA;">
          <input type="checkbox" name="Ticket">
            <xsl:attribute name="value">
              <xsl:value-of select="TicketID" />
            </xsl:attribute>
            <xsl:if test="Selected = 'checked'">
              <xsl:attribute name="checked">checked</xsl:attribute>
            </xsl:if>
          </input>
        </td>
        <td bgcolor="#fcfae0" class="text" style="border-left: 1px dashed #AAA; border-right: 1px dashed #AAA;">
          <xsl:choose>
            <xsl:when test="ReservType = 1">
              <xsl:value-of select="Price*ReservAmount*0.01" />руб.
            </xsl:when>
            <xsl:otherwise>
              <xsl:value-of select="ReservInfo" />
            </xsl:otherwise>
          </xsl:choose>
        </td>
      </xsl:when>
    </xsl:choose>
  </tr>
  <tr class="tdNewDesign" style="display: none;">
    <td>A</td>
    <td>B</td>
    <td>C</td>
    <td>D</td>
  </tr>
</xsl:template>
我试图在所有生成的行之后添加一个不可见的额外行,但它是在每行之后添加的,这意味着不可见行的数量与可见行的数量相同


如何使其工作?

您想检查自己是否是最后一行,如果是,则添加不可见的行

<xsl:if test="not(following-sibling::Item)">
  <tr class="tdNewDesign" style="display: none;">
    <td>A</td>
    <td>B</td>
    <td>C</td>
    <td>D</td>
  </tr>
</xsl:if>

由于您的模板是为Tickets2/Item运行的,因此它将在ever Item之后添加不可见的行。创建另一个在Tickets2上运行的模板,为子级运行模板,然后添加不可见行

<xsl:if test="not(following-sibling::Item)">
  <tr class="tdNewDesign" style="display: none;">
    <td>A</td>
    <td>B</td>
    <td>C</td>
    <td>D</td>
  </tr>
</xsl:if>
大致如下:

<xsl:template match="Tickets2>
  <xsl:apply-templates />
  <tr class="tdNewDesign" style="display: none;">
    <td>A</td>
    <td>B</td>
    <td>C</td>
    <td>D</td>
  </tr>
</xsl:template>

您可以在关闭标记之前添加新行。以上模板仅适用于第行。您需要在此模板后放置新行。