2015-11-12 60 views
0

在任何其他語言中,我可以將前一行的值存儲在變量中,然後查看它是否與當前值匹配,但是唉,XSL中的變量並不是真的「可變」或類似的東西......XSL:如果不在html表中重複一個值(前兄弟?)

那麼,我該如何完成本應該是一件簡單的任務呢?

我有一些(可能形式很差)XML,由第三方應用程序輸出。我用它使用XSL輸出中每個以下的行爲HTML錶行:

<xsl:for-each select="Designs/TrackingDetails/Details"> 

    <tr> 
    <th width="200"><xsl:value-of select="./@DGGroup"/></th> 
    <th width="350"><xsl:value-of select="./@DGName"/></th> 
    <td><xsl:value-of select="./@DGDate"/></td> 
    <td><xsl:value-of select="./@DGUser"/></td> 
    </tr> 

</xsl:for-each> 

我想是因爲它僅打印每一個獨特的「DGGroup」一次,但無論是打印所有的人,或者什麼都不是。

所以,到最後,我想HTML這樣的(使用XML類似帖子的底部):

<tr><td>General</td><td>Quote in Date</td><td>04/16/2015</td><td>Ed Garcia</td></tr> 

,並在下一行:

<tr><td></td><td>Bid Complete</td><td>04/12/2015</td><td>John Smith</td></tr> 

這裏的一些代碼,到目前爲止,我已經試過:

<xsl:if test="preceding-sibling::./DGGroup[1]=self::./DGGroup"> 

<xsl:if test="preceding-sibling::*[1]=./@DGGroup"> 

...這兩者都不工作

下面是一些XML的示例:

<Designs> 
<TrackingDetails Transactions_Id="2" Reference="A1234"> 
<Details DGGroup="General" DGName="Quote in Date" DGDate="04/16/2015" DGUser="Ed Garcia" /> 
<Details DGGroup="General" DGName="Bid Complete" DGDate="04/12/2015" DGUser="John Smith" /> 
<Details DGGroup="Design" DGName="Approval Recieved" DGDate="" DGUser="" /> 
<Details DGGroup="Design" DGName="Design Complete" DGDate="09/18/2015" DGUser="Fred Smith" /> 
<Details DGGroup="Production" DGName="Released to Production" DGDate="09/18/2015" DGUser="Fred Smith" /> 
<Details DGGroup="Production" DGName="At Printers" DGDate="" DGUser="" /> 
<Details DGGroup="Production" DGName="Packaged" DGDate="" DGUser="" /> 
<Details DGGroup="Delivery" DGName="Delivery Packet Made" DGDate="09/18/2015" DGUser="Fred Smith" /> 
<Details DGGroup="Invoice" DGName="Invoiced" DGDate="" DGUser="" /> 
</TrackingDetails> 

任何想法? TIA!

回答

0

以下是一種方法。
第一組的結果由DGGroup
然後,只有當位置打印組名稱= 1個

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:output method="html" indent="yes"/> 
    <xsl:key name="groups" match="/TrackingDetails/Details" use="@DGGroup" /> 

    <xsl:template match="/TrackingDetails"> 
    <table id="Details"> 
     <tr class="heading"> 
     <th scope="col">DGGroup</th> 
     <th scope="col">DGName</th> 
     <th scope="col">DGDate</th> 
     <th scope="col">DGUser</th> 
     </tr> 
    <xsl:apply-templates select="Details[generate-id() = generate-id(key('groups', @DGGroup)[1])]"/> 
    </table> 
    </xsl:template> 
    <xsl:template match="Details"> 
     <xsl:for-each select="key('groups', @DGGroup)"> 
     <tr> 
      <xsl:choose> 
      <xsl:when test="position()=1"> 
       <td><xsl:value-of select="@DGGroup"/></td> 
      </xsl:when> 
      <xsl:otherwise> 
       <td></td> 
      </xsl:otherwise> 
      </xsl:choose> 
      <td><xsl:value-of select="@DGName"/></td> 
      <td><xsl:value-of select="@DGDate"/></td> 
      <td><xsl:value-of select="@DGUser"/></td> 
     </tr> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 
+0

感謝。問題:我現在有一個for-each選擇我在哪裏傳遞值:/ TrackingDetails [@ Reference = $ currentOT]/Details - 我應該在哪裏添加它?將選擇添加到? – Nitwit

+0

我認爲'TrackingDetails'需要被'TrackingDetails [@ Reference = $ currentOT]'替換(無論它在哪裏)(目前在兩行) –

+1

我還不能投票,所以這裏是一個大拇指:0) – Nitwit