2016-07-08 65 views
0

我有兩個元素,我必須從中選擇一個獨特的同時循環使用鍵,但是變得空而不是一個。請參考下面如何從循環中生成唯一的ID

<xsl:key name="Keyunique" match="//schedules/test/Operatorvalue" use="//schedules/test/Operatorvalue/@Operatorvalue" /> 



<xsl:template name="Buildairline">   
     <xsl:for-each select="//schedules/test">  
      <xsl:for-each select="key('Keyunique', //schedules/test/Operatorvalue/@Operatorvalue)[1]">     
      <Row Action="ADD"> 
       <xsl:value-of select="current()/Operatorvalue" />|<xsl:value-of select="current()/OperatorDesc" />|test|<xsl:value-of select="current()/operatordesc2" /> 
      </Row>    
     </xsl:for-each> 
     </xsl:for-each> 
     </Rows>  
    </xsl:template> 

下面是XML

<schedules> 
<test> 
<Operatorvalue>value1</Operatorvalue> 
<OperatorDesc>valuedesc</OperatorDesc> 
<OperatorDesc2>valuedesc2</OperatorDesc2> 
</test> 
<test> 
<Operatorvalue>value1</Operatorvalue> 
<OperatorDesc>valuedesc</OperatorDesc> 
<OperatorDesc2>valuedesc2</OperatorDesc2> 
</test> 
<test> 
<Operatorvalue>value2</Operatorvalue> 
<OperatorDesc>valuedesc2</OperatorDesc> 
<OperatorDesc2>valuedesc3</OperatorDesc2> 
</test> 
<schedules> 

預計輸出

Row value1|valuedesc|valuedesc2 
Row value2|valuedesc2|valuedesc3 
+1

請發佈您的預期輸出。 –

回答

1

你有幾個問題,其中包括:

  1. 您有一個名爲模板那絕不是調用 - 顯然沒有其他模板應用;

  2. 您執行Muenchian分組不正確;

  3. 你在哪裏,你需要一個相對路徑到當前節點的後代的地方使用//

    ; //總是從根開始;

  4. XML區分大小寫:operatordesc2未選擇名爲Operatordesc2的節點;

  5. Operatorvalue元素,不是屬性 - 所以@Operatorvalue不會選擇任何內容。

試試這個作爲你的出發點:(!關閉schedules標籤後)

XSLT 1.0

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

<xsl:key name="Keyunique" match="test" use="Operatorvalue"/> 

<xsl:template match="/schedules">  
    <xsl:for-each select="test[generate-id()=generate-id(key('Keyunique', Operatorvalue)[1])]">  
     <xsl:text>Row </xsl:text> 
     <xsl:value-of select="Operatorvalue" /> 
     <xsl:text>|</xsl:text> 
     <xsl:value-of select="OperatorDesc" /> 
     <xsl:text>|</xsl:text> 
     <xsl:value-of select="OperatorDesc2" /> 
     <xsl:text>&#10;</xsl:text> 
    </xsl:for-each> 
</xsl:template> 

</xsl:stylesheet> 

應用到你的輸入例子,結果將是:

Row value1|valuedesc|valuedesc2 
Row value2|valuedesc2|valuedesc3 

請注意,值爲OperatorDescOperatordesc2拍攝只有第一個記錄在每個組。