1

「column3」の値が変更されるたびに、行間にギャップを作成しようとしています。現時点では、ギャップは 2 行ごとに表示されるように設定されていますが、これは必要なものではありません。たとえば、最初の 10 行の「column3」の値は 1,1,3,3,3,3,5,5,5,5 であり、最後の「1」と最初の「3」などの間にギャップが必要です。 .

 <xsl:for-each select="Market">
        <tr>
          <td>
            <xsl:value-of select="Column1"/>
          </td>
          <td>
            <xsl:value-of select="Column2"/>
          </td>
          <td>
            <xsl:value-of select="Column3"/>
          </td>
        </tr>
          <xsl:if test="(position() mod 2 = 0)">
          <tr>
            <td colspan="5" height="25px" />
          </tr>
        </xsl:if>
4

1 に答える 1

3

これを行うには、XPath で follow -sibling軸を使用できます。

<xsl:if test="Column3 != following-sibling::Market[1]/Column3">

つまり、次のMarket要素には異なる値を持つColumn3要素がありますか。

たとえば、次の XML があるとします。

<Markets>
    <Market>
        <Column1>A</Column1>
        <Column3>1</Column3>
    </Market>
    <Market>
        <Column1>A</Column1>
        <Column3>1</Column3>
    </Market>
    <Market>
        <Column1>A</Column1>
        <Column3>3</Column3>
    </Market>
    <Market>
        <Column1>A</Column1>
        <Column3>3</Column3>
    </Market>
    <Market>
        <Column1>A</Column1>
        <Column3>3</Column3>
    </Market>
    <Market>
        <Column1>A</Column1>
        <Column3>3</Column3>
    </Market>
    <Market>
        <Column1>B</Column1>
        <Column3>4</Column3>
    </Market>
    <Market>
        <Column1>B</Column1>
        <Column3>4</Column3>
    </Market>
</Markets>

次の XSLT を適用すると

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="html" indent="yes"/>
   <xsl:template match="/Markets">
      <table>
         <xsl:apply-templates select="Market"/>
      </table>
   </xsl:template>

   <xsl:template match="Market">
      <tr>
         <td>
            <xsl:value-of select="Column1"/>
         </td>
         <td>
            <xsl:value-of select="Column3"/>
         </td>
      </tr>
      <xsl:if test="Column3 != following-sibling::Market[1]/Column3">
         <tr>
            <td colspan="2" height="25px"/>
         </tr>
      </xsl:if>
   </xsl:template>
</xsl:stylesheet>

次に、以下が出力されます

<table>
   <tr>
      <td>A</td>
      <td>1</td>
   </tr>
   <tr>
      <td>A</td>
      <td>1</td>
   </tr>
   <tr>
      <td colspan="2" height="25px"/>
   </tr>
   <tr>
      <td>A</td>
      <td>3</td>
   </tr>
   <tr>
      <td>A</td>
      <td>3</td>
   </tr>
   <tr>
      <td>A</td>
      <td>3</td>
   </tr>
   <tr>
      <td>A</td>
      <td>3</td>
   </tr>
   <tr>
      <td colspan="2" height="25px"/>
   </tr>
   <tr>
      <td>B</td>
      <td>4</td>
   </tr>
   <tr>
      <td>B</td>
      <td>4</td>
   </tr>
</table>

(注: 簡潔にするために、Column2 を省略しました)。

于 2012-05-25T09:52:12.527 に答える