2016-01-18 39 views
-1

我被我的XSL輸出卡住了。 我創建了一個頁面,其中顯示了在發送給客戶之前需要經過Manager批准的關係編號的文檔信息,其顯示的文檔類型(以及我在此過程中刪除的大量其他信息)。XSL for-each-group,如何提供幫助

目前我得到在瀏覽器中輸出

Relation number Document sort 
    2222222  Jaarbrief 
    2222222  Brief 
    99999999 Jaarbrief-addendum 
    99999999 Jaarbrief 
    99999999 Brief 

我想要的是像

Relation number Document sort 
22222222 Jaarbrief 
      Brief 
22224325 Jaarbrief-addendum 
      Jaarbrief 
      Brief 
33333333 Jaarbrief 
      Brief 

輸出我想已經有很多使用XSL換各組,但我不能讓它以正確的方式完成。

XSL代碼:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output 
    method="html" 
    encoding="UTF-8" 
    indent="yes" /> 

<xsl:template match="files"> 
    <xsl:variable name = "count" select ="@count" /> 
    <xsl:variable name = "AUsr" select ="@user" /> 
    <html> 
    <head> 
     <title>test</title> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
     <link href="static/css/main.css" rel="stylesheet" type="text/css"></link> 
     <link href="static/css/gotham.css" rel="stylesheet" type="text/css"></link> 
     <link href="static/css/sub-style.css" rel="stylesheet" type="text/css" media="screen"></link> 
     <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
     <script language="javascript" type="text/javascript" src="static/css/default.js">xslthelper</script> 
     <script src="static/js/cookie.js"></script> 
     <script src="static/js/ui.js"></script> 
     <!--[if lt IE 9]> 
      <script src="static/js/html5shiv.js"></script> 
     <![endif]--> 
    </head> 
    <body> 
     <div class="container"> 
      <div class="body-content"> 
      <div class="wrap"> 
      <br/> 
       <form method="POST" id="myform" name="myform" action="PostProlo" enctype="multipart/form-data"> 


         <div class="module"> 
         <table width="100%" id="match_tbl" name="match_tbl"> 
          <tr valign="top" align="center"> 
            <th width="16px"></th> 
           <th width="80px" >Relatie nummer</th> 
           <th width="70px" >Document<BR/>soort</th> 
          </tr> 

          <xsl:for-each select="folder/file[Pages[1]/Page[1]/Dummy='FACTUUR']"> 
           <xsl:sort select="Pages[1]/Page[1]/Relatienummer" data-type="text" /> 
           <xsl:sort select="Pages[1]/Page[1]/Type" data-type="text" order="descending"/> 
           <!-- Sortering volgorde : html table view --> 
           <!-- All data fields to variables, also the not used fields for easy re-use : html table view --> 
           <xsl:variable name = "file" select ="filename" /> 
           <xsl:variable name = "path" select ="path" /> 
           <xsl:variable name = "Count" select ="@Count" /> 
           <xsl:variable name = "fileShort" select ="substring($file,1,string-length($file)-4)" /> 
           <xsl:variable name = "fileShow" select ="substring($file,1,string-length($file)-20)" /> 
           <xsl:variable name = "Formsoort" select ="Pages[1]/Page[1]/Duplex" /> 
           <xsl:variable name = "Typedoc" select ="Pages[1]/Page[1]/Type" /> 
           <xsl:variable name = "Relatienummer" select ="Pages[1]/Page[1]/Relatienummer" /> 
           <xsl:variable name = "Type" select ="Pages[1]/Page[1]/Type" /> 
           <xsl:variable name = "Datum" select ="Pages[1]/Page[1]/Datum" /> 
           <xsl:variable name = "Tijd" select ="Pages[1]/Page[1]/Time" /> 
           <xsl:variable name = "OrderNo" select ="string(format-number(position(), '00000'))" /> 

      <!-- html table definition starts here, with above variables used if neccesary --> 
            <tr valign="top" align="left"> 
            <td> 
             <input id="Mname{$OrderNo}" name="Mname{$OrderNo}" type="hidden" value="{$fileShort}" /> 
             <input id="Mpath{$OrderNo}" name="Mpath{$OrderNo}" type="hidden" value="{$path}" /> 
             <input id="Type{$OrderNo}" name="Type{$OrderNo}" type="hidden" value="{$Type}" /> 
             <input id="Relatienummer{$OrderNo}" name="Relatienummer{$OrderNo}" type="hidden" value="{$Relatienummer}" /> 
             <input class="ng_checkbox2 refreshbox" type="checkbox" id="MID{$OrderNo}" name="MPDF{$OrderNo}" /> 
            </td> 
            <td align="center"><xsl:value-of select="$Relatienummer" /> 
            </td> 
           <td align="center"><xsl:value-of select="$Type" /> 
            </td> 

           </tr> 
          </xsl:for-each> 

         </table> 
        </div> 

       </form> 
      </div> 
</div> 
</div> 
    </body> 

</html> 

XML使用

<?xml version="1.0" encoding="UTF-8"?> 
<files user="ADMIN" D_Printer=""> 
    <folder> 
     <file Count="1"> 
      <Pages Count="1"> 
       <Page> 
        <Dummy>FACTUUR</Dummy> 
        <Datum>28-10-2015</Datum> 
        <Tijd>10:52</Tijd> 
        <Type>Brief</Type> 
        <Gebruiker>USERX</Gebruiker> 
        <Relatienummer>2222222</Relatienummer> 
       </Page> 
      </Pages> 
      <filename>99999999_Brief_00ZSY1Y4UEZWX81 - Copy.xml</filename> 
      <path>C:\Connect\WF\Wachtrij\PPWORKDIR\UserQueues\ADMIN\</path> 
      <time>2016/01/18 12:07:18</time> 
      <size>891</size> 
     </file> 
     <file Count="1"> 
      <Pages Count="1"> 
       <Page> 
        <Dummy>FACTUUR</Dummy> 
        <Datum>28-10-2015</Datum> 
        <Tijd>10:52</Tijd> 
        <Type>Brief</Type> 
        <Gebruiker>USERX</Gebruiker> 
        <Relatienummer>99999999</Relatienummer> 
       </Page> 
      </Pages> 
      <filename>99999999_Brief_00ZSY1Y4UEZWX81.xml</filename> 
      <path>C:\Connect\WF\Wachtrij\PPWORKDIR\UserQueues\ADMIN\</path> 
      <time>2016/01/18 12:06:10</time> 
      <size>892</size> 
     </file> 
     <file Count="1"> 
      <Pages Count="1"> 
       <Page> 
        <Dummy>FACTUUR</Dummy> 
        <Datum>28-10-2015</Datum> 
        <Tijd>10:52</Tijd> 
        <Type>Jaarbrief</Type> 
        <Gebruiker>USERX</Gebruiker> 
        <Relatienummer>2222222</Relatienummer> 
       </Page> 
      </Pages> 
      <filename>99999999_Brief_00ZSY1YU093NZF2 - Copy - Copy.xml</filename> 
      <path>C:\Connect\WF\Wachtrij\PPWORKDIR\UserQueues\ADMIN\</path> 
      <time>2016/01/18 12:07:34</time> 
      <size>899</size> 
     </file> 
     <file Count="1"> 
      <Pages Count="1"> 
       <Page> 
        <Dummy>FACTUUR</Dummy> 
        <Datum>28-10-2015</Datum> 
        <Tijd>10:52</Tijd> 
        <Type>Jaarbrief</Type> 
        <Gebruiker>USERX</Gebruiker> 
        <Relatienummer>99999999</Relatienummer> 
       </Page> 
      </Pages> 
      <filename>99999999_Brief_00ZSY1YU093NZF2 - Copy.xml</filename> 
      <path>C:\Connect\WF\Wachtrij\PPWORKDIR\UserQueues\ADMIN\</path> 
      <time>2016/01/18 12:06:46</time> 
      <size>900</size> 
     </file> 
     <file Count="1"> 
      <Pages Count="1"> 
       <Page> 
        <Dummy>FACTUUR</Dummy> 
        <Datum>28-10-2015</Datum> 
        <Tijd>10:52</Tijd> 
        <Type>Jaarbrief-addendum</Type> 
        <Gebruiker>USERX</Gebruiker> 
        <Relatienummer>99999999</Relatienummer> 
       </Page> 
      </Pages> 
      <filename>99999999_Brief_00ZSY1YU093NZF2.xml</filename> 
      <path>C:\Connect\WF\Wachtrij\PPWORKDIR\UserQueues\ADMIN\</path> 
      <time>2015/12/03 16:40:46</time> 
      <size>909</size> 
     </file> 
     <file> 
      <filename>dummy.xml</filename> 
      <path>C:\UserQueues\ADMIN\</path> 
      <time>2016/01/18 12:14:32</time> 
      <size>445</size> 
     </file> 
    </folder> 
</files> 

我希望你能幫助我,讓我知道如果我錯過任何需要的信息。 提前非常大的感謝

+0

請編輯您的問題和解決您已將所有''
元素。縮進代碼(以及期望的輸出)由四個空格代替,而不是使用'
'。 –

+0

更改了佈局,刪除了BR元素 – Richard

回答

0

看起來你是分組在第一頁中指定的Relatienummerfile元素,所以xsl:for-each-group看起來像這樣

然後,您需要遍歷的元素在當前組中,這樣你就可以輸出行

<xsl:for-each select="current-group()"> 

然後,你可以檢查它是否是該組中的第一行來決定whethe R鍵輸出數量

<xsl:if test="position() = 1"> 
    <xsl:value-of select="current-grouping-key()" /> 
</xsl:if>  

試試這個簡單的XSLT作爲起點

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="html" encoding="UTF-8" indent="yes" /> 

<xsl:template match="files"> 
    <html> 
    <head> 
     <title>test</title> 
    </head> 
    <body> 
     <table> 
     <tr> 
      <th>Relation number</th> 
      <th>Document sort</th> 
     </tr> 
     <xsl:for-each-group select="folder/file" group-by="Pages/Page[1]/Relatienummer"> 
      <xsl:for-each select="current-group()"> 
       <tr> 
        <td> 
         <xsl:if test="position() = 1"> 
          <xsl:value-of select="current-grouping-key()" /> 
         </xsl:if>  
        </td> 
        <td><xsl:value-of select="Pages/Page[1]/Type" /></td> 
       </tr> 
      </xsl:for-each> 
     </xsl:for-each-group> 
     </table> 
    </body> 
    </html> 
    </xsl:template> 
</xsl:stylesheet> 
+0

謝謝,我今晚會試試這個,並讓你知道結果。 – Richard

+0

偉大的工程:)現在我將建立在此基礎上的其餘部分, 我希望覈准按鈕的邏輯工作:) – Richard

+0

我有一個問題, 如果我把一個複選框在Value-of Select =「current-grouping-關鍵WIL它選擇所有文件或只有一個, 在我的結果我發帖的形式時,只得到1號文件。 也許這是有意設計 – Richard