2011-04-15 77 views
1

我需要根據排序組中的前一個兄弟運行條件操作。我知道前面的兄弟函數作用於原始文檔,而不是排序結果。有沒有辦法在排序結果列表上進行操作?我不認爲muenchian分組方法是我需要的,因爲我不想基於前面的兄弟進行分組。xslt 1.0排序組前同胞

鑑於下面的XML我想按容器的值進行排序,然後測試以查看前面的兄弟(在排序結果中)的type屬性是否不同,如果是我需要輸出新的@type的值,但我不想按@type排序結果。

XML

<c> 
    <did> 
     <container id="cid1059023" type="Box">C 3</container> 
     <container id="cid1059004" type="Map-case">C 1</container> 
     <container id="cid1059002" type="Binder">OSxxx-3</container> 
     <container id="cid1059042" type="Box">OSxxx-1</container> 
    </did> 
</c> 
<c> 
    <did> 
     <container id="cid1059025" type="Box">C 4</container> 
     <container id="cid1059006" type="Map-case">C 2</container> 
    </did> 
</c> 

XSL

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl" version="1.0"> 
    <xsl:template match="/"> 
     <table> 
      <xsl:for-each select="child::*/container[@id]"> 
       <xsl:sort select="."/> 
       <tr> 
        <td class="container"> 
         <xsl:if test="@type != preceding-sibling::*/@type"> 
          <xsl:value-of select="@type"/> 
         </xsl:if> 
         <xsl:value-of select="."/> 
        </td> 
       </tr> 
      </xsl:for-each> 
     </table> 
    </xsl:template> 
</xsl:stylesheet> 

感謝。

+0

http://stackoverflow.com/questions/5205276/do-xpath-axes-respect-xslt-sorting – dkackman 2011-04-15 00:39:23

+0

任何方式來做到這一點沒有擴展功能? – Winona 2011-04-15 01:24:15

+0

我不相信,除非你可以使用xslt 2 – dkackman 2011-04-15 01:53:50

回答

0

我不明白如何使用XSLT 1.0來做到這一點,而不使用擴展名。所以我要麼使用XSLT 2.0,要麼如果有人用槍指着你喊你應該使用XSLT 1.0,那麼你可以用兩個XSLT步驟創建一個管道,在第一步中進行排序,過濾一秒鐘。

+0

謝謝大家,我有一種感覺,這是不可能的xslt 1.0,不幸的是我不能使用xslt 2.0或擴展,因爲我無法改變處理環境。我們只是沒有。 – Winona 2011-04-15 02:10:13