2013-12-12 33 views
0

從我的XML代碼中,我想一次取下所有的項目而不重複。 我的XML代碼:以不重複的方式取所有元素xslt 1.0

 <NTC_LIGHTLISTPRODUCT> 
     <IMMUTABLE_ID>9814</IMMUTABLE_ID> 
     <LIGHT_DESCRIPTION_LIST>    
      <LIGHT_DESCRIPTION>     
       <LIGHT_SUPPORT_HEIGHT>198</LIGHT_SUPPORT_HEIGHT> 
      </LIGHT_DESCRIPTION> 
      <LIGHT_DESCRIPTION>     
       <LIGHT_SUPPORT_HEIGHT>166</LIGHT_SUPPORT_HEIGHT> 
      </LIGHT_DESCRIPTION> 
      <LIGHT_DESCRIPTION>     
       <LIGHT_SUPPORT_HEIGHT>122</LIGHT_SUPPORT_HEIGHT> 
      </LIGHT_DESCRIPTION> 
      <LIGHT_DESCRIPTION>     
       <LIGHT_SUPPORT_HEIGHT>76</LIGHT_SUPPORT_HEIGHT> 
      </LIGHT_DESCRIPTION> 
      <LIGHT_DESCRIPTION>     
       <LIGHT_SUPPORT_HEIGHT>31</LIGHT_SUPPORT_HEIGHT> 
      </LIGHT_DESCRIPTION> 
      <LIGHT_DESCRIPTION>     
       <LIGHT_SUPPORT_HEIGHT>31</LIGHT_SUPPORT_HEIGHT> 
      </LIGHT_DESCRIPTION>    
     </LIGHT_DESCRIPTION_LIST> 
     <NTC_LIGHTLISTPRODUCT> 

我想要的序列:198 166 122 76 31

我寫了這個代碼XSLT 1.0,但我不能得到正確的結果:

<xsl:for-each select="LIGHT_DESCRIPTION"> 
    <xsl:for-each select="LIGHT_SUPPORT_HEIGHT"> 
     <xsl:if test=".=not(preceding::LIGHT_SUPPORT_HEIGHT[1][preceding::IMMUTABLE_ID=$EF])"> 
      <span style="font-size:9pt; text-align:center; "> 
       <xsl:value-of select="."/> 
      </span> 
     </xsl:if> 
</xsl:for-each> 

EF是當前節點(IMMUTABLE ID)的變量,我使用它來保留在此節點內。

可以「你」給我更多的指示?感謝

+0

您的代碼段與示例XML不匹配 - IMMUTABLE_ID來自哪裏? –

+0

immutable_ID是標識每個節點的變量......有很多這種節點燈描述。 –

回答

3

的標準方法來分組在XSLT 1.0這樣的問題被稱爲「Muenchian分組的」 - 本質上可以定義一個關鍵,這應當被視爲「相同」,然後使用一個小技巧與generate-id組節點只處理每個組中的第一個節點。

在這種情況下,分組約束是LIGHT_SUPPORT_HEIGHT值本身的組合,和值爲含有NTC_LIGHTLISTPRODUCTIMMUTABLE_ID

<xsl:key name="supportHeightKey" match="LIGHT_SUPPORT_HEIGHT" 
    use="concat(., '|', ancestor::NTC_LIGHTLISTPRODUCT[1]/IMMUTABLE_ID)" /> 

現在你可以使用挑選出的唯一值

<!-- assuming the current context is LIGHT_DESCRIPTION_LIST --> 
<xsl:for-each select="LIGHT_DESCRIPTION/LIGHT_SUPPORT_HEIGHT[ 
    generate-id() = generate-id(
     key('supportHeightKey', concat(., '|', current()/../IMMUTABLE_ID))[1])]"> 
    <span style="font-size:9pt; text-align:center; "> 
    <xsl:value-of select="."/> 
    </span> 
</xsl:for-each> 
+0

感謝您的解釋對於理解我的XSLT問題非常有幫助。 –