5

XSL ファイルからの HTML 出力をセットアップして、ノード要素の値が変更されたタイミングに基づいて背景色が交互になるように行の結果を生成するのに助けが必要です。データは SQL Server 2008 から取得され、クエリ結果は "DivisionName" のノード要素で並べ替えられます。

SELECT      
  d.DivisionName,
  CASE
        WHEN t.ActualFinish is not NULL
              THEN convert(varchar, datepart(mm, t.ActualFinish))+ '/' + convert(varchar, datepart(dd, t.ActualFinish)) + '/' + convert(varchar, datepart(yyyy, t.ActualFinish))
        ELSE ' '
  END AS "Date",
  r.RegionName, 
  t.Name, 
  CASE
        WHEN t.ScheduleByElement is not NULL
              THEN t.ScheduleByElement
        ELSE ' '
  END AS "ScheduleByElement",
  '' AS "Activity",
  '' AS "Team",
  CASE
        WHEN t.WatchStatus is not NULL
              THEN convert(varchar, datepart(mm, t.WatchStatus))+ '/' + convert(varchar, datepart(dd, t.WatchStatus)) + '/' + convert(varchar, datepart(yyyy, t.WatchStatus))
        ELSE ' '
  END AS "Status"
FROM           
  dbo.Tasks AS t 
        INNER JOIN dbo.Division AS d 
              ON t.fk_DivisionID = d.DivisionID 
        INNER JOIN dbo.Region AS r 
              ON t.fk_RegionID = r.RegionID
WHERE        
  (t.OutlineLevel = 3) 
  AND (t.ScheduleByElement <> '') 
  AND (t.FileName LIKE 'NVDE%')
  AND (t.ActualFinish is not NULL)
ORDER BY d.DivisionName, t.ActualFinish, r.RegionName 
FOR XML PATH('DivisonName'), ROOT('CCDN')

以下に、XSL ファイルの完全な内容を示します。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes"/>
<xsl:template match="/ROOT">


    <table border="1" cellpadding="6">
        <tr bgcolor="#9acd32">
            <td>Division</td>
            <td>Date</td>
            <td>Region</td>
            <td>System Name</td>
            <td>Schedule by/Plan by Element</td>
            <td>Activity</td>
            <td>Deployment Engineering Team</td>
            <td>Status</td>
        </tr>

        <xsl:for-each select="CCDN/DivisonName [not(preceding-sibling::DivisionName[1]/@DivisionNameID = @DivisionNameID)]">
            <xsl:variable name="DivisionNameID" select="@DivisionNameID" />
            <xsl:variable name="bgcolor">
                <xsl:choose>
                    <xsl:when test="position() mod 2 = 1">#FFFFCC</xsl:when>
                    <xsl:otherwise>#CCFFFF</xsl:otherwise>
                </xsl:choose>
            </xsl:variable>

            <xsl:for-each select=".|following-sibling::DivisionName[@DivisionNameID = $DivisionNameID]">
                <tr bgcolor="{$bgcolor}">
                    <xsl:for-each select="./*">
                        <td>
                            <xsl:value-of select="." />
                        </td>
                    </xsl:for-each>
                </tr>
            </xsl:for-each>
        </xsl:for-each>

    </table>


</xsl:template>

あなたのサイトでこれに似た他の質問を検索しましたが、特定のノード要素の変化する値で色が定義されている例は見つかりませんでした。現在、その結果、DivisionName の値に関係なく、テーブルは 1 行おきに #FFFFCC と #CCFFFF の間で背景色を交互に変えています。

次の HTML は、私が求めている結果をよりよく表していると思われます。行は区分 A、B、C、D に従って昇順に並べ替えられます。最初の区分に関連付けられたすべての行は 1 つの色合い (白) または色であり、次の区分に関連付けられたすべての行は別の色合いまたは色であり、その時点から繰り返します。A に対して行が返されない場合、B は白で交互になります。特定の分割値に対して特定の色合いや色を定義するハードコーディングはありません。返された除算に関係なく変更され、除算値が変更されたかどうかのみが考慮されます。

<style type="text/css">
        table.mystyle
        {
        border-width: 0 0 1px 1px;
        border-spacing: 0;
        border-collapse: collapse;
        border-style: solid;
        }
        .mystyle td, .mystyle th
        {
        margin: 0;
        padding: 4px;
        border-width: 1px 1px 0 0;
        border-style: solid;
        }
        tr.oddcolor
        {
        Background-color:#FFFFFF;
        }
        tr.evencolor
        {
        Background-color:#CCCCCC;
        }
    </style>
<table class="mystyle">
<tr>
<b>
  <td>Division</td>
  <td>Date</td>
  <td>Region</td>
  <td>System Name</td>
  <td>Schedule by/Plan by Element</td>
  <td>Activity</td>
  <td>Deployment Engineering Team</td>
  <td>Status</td>
</b>
 </tr>
 <tr bgcolor="#FFFFCC">
  <td>A</td>
  <td>3/2/2012</td>
  <td>region</td>
  <td>xxx</td>
  <td>xxxx</td>
  <td></td>
  <td></td>
  <td></td>
</tr>
<tr bgcolor="#FFFFCC">
  <td>A</td>
  <td>4/12/2012</td>
  <td>region</td>
  <td>xxx</td>
  <td>xxxx</td>
  <td></td>
  <td></td>
  <td></td>
</tr>
<tr bgcolor="#FFFFCC">
  <td>A</td>
  <td>4/12/2012</td>
  <td>region</td>
  <td>xxx</td>
  <td>xxxx</td>
  <td></td>
  <td></td>
  <td></td>
</tr>
<tr bgcolor="#CCFFFF">
  <td>B</td>
  <td>4/27/2012</td>
  <td>region</td>
  <td>xxx</td>
  <td>xxxx</td>
  <td></td>
  <td></td>
  <td></td>
</tr>
<tr bgcolor="#CCFFFF">
  <td>B</td>
  <td>5/1/2012</td>
  <td>region</td>
  <td>xxx</td>
  <td>xxxx</td>
  <td></td>
  <td></td>
  <td></td>
</tr>
<tr bgcolor="#FFFFCC">
  <td>C</td>
  <td>5/15/2012</td>
  <td>region</td>
  <td>xxx</td>
  <td>xxxx</td>
  <td></td>
  <td></td>
  <td></td>
</tr>
<tr bgcolor="#FFFFCC">
  <td>C</td>
  <td>5/24/2012</td>
  <td>region</td>
  <td>xxx</td>
  <td>xxxx</td>
  <td></td>
  <td></td>
  <td></td>
</tr>
<tr bgcolor="#CCFFFF">
  <td>D</td>
  <td>5/25/2012</td>
  <td>region</td>
  <td>xxx</td>
  <td>xxxx</td>
  <td></td>
  <td></td>
  <td></td>
</tr>
</table>

ありがとう。

4

1 に答える 1

1

それから私は別のバッシュをします。この方法は、部門によってすでにソートされているデータに依存しています。

XML

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <row division="a">Data</row>
    <row division="a">D1123ta</row>
    <row division="b">Da123ta</row>
    <row division="b">Da14ta</row>
    <row division="b">Da12312ta</row>
    <row division="c">Da123ta</row>
    <row division="c">Dat123a</row>
    <row division="c">Da123ta</row>
    <row division="c">Dat123a</row>
    <row division="d">Da123ta</row>
    <row division="d">Dat123a</row>
</root>

XSL

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">
    <xsl:output indent="yes"/>
    <xsl:key name="arb" match="/root/row" use="@division"/>
    <xsl:template match="/">
       <!-- <table>
            <xsl:for-each select="root/row">
                <xsl:if test="generate-id(.) = generate-id(key('arb',@division))">
                    <tr><td>New Colour</td></tr>
                </xsl:if>
                <tr><td><xsl:value-of select="."/></td></tr>
            </xsl:for-each>
        </table>-->
        <html>
            <body>
                <table>
            <xsl:for-each select="root/row[generate-id(.) = generate-id(key('arb',@division))]">
                <xsl:variable name="local_div" select="@division"/>
                <tbody>
                    <xsl:if test="position() mod 2 = 0">
                        <xsl:attribute name="bgcolor">red</xsl:attribute>
                    </xsl:if>
                    <xsl:for-each select="../row[@division=$local_div]">
                        <tr><td><xsl:value-of select="@division"/></td><td><xsl:value-of select="."/></td></tr>
                    </xsl:for-each>
                </tbody>
            </xsl:for-each>
        </table>
            </body>
        </html>

    </xsl:template>
</xsl:stylesheet>

製品

<html>
<body>
  <table>
     <tbody>
        <tr>
           <td>a</td>
           <td>Data</td>
        </tr>
        <tr>
           <td>a</td>
           <td>D1123ta</td>
        </tr>
     </tbody>
     <tbody bgcolor="red">
        <tr>
           <td>b</td>
           <td>Da123ta</td>
        </tr>
        <tr>
           <td>b</td>
           <td>Da14ta</td>
        </tr>
        <tr>
           <td>b</td>
           <td>Da12312ta</td>
        </tr>
     </tbody>
     <tbody>
        <tr>
           <td>c</td>
           <td>Da123ta</td>
        </tr>
        <tr>
           <td>c</td>
           <td>Dat123a</td>
        </tr>
        <tr>
           <td>c</td>
           <td>Da123ta</td>
        </tr>
        <tr>
           <td>c</td>
           <td>Dat123a</td>
        </tr>
     </tbody>
     <tbody bgcolor="red">
        <tr>
           <td>d</td>
           <td>Da123ta</td>
        </tr>
        <tr>
           <td>d</td>
           <td>Dat123a</td>
        </tr>
     </tbody>
  </table>
</body>
</html>
于 2012-09-19T12:44:31.297 に答える