2013-12-12 2 views
0

보낸 사람 My XML code 반복하지 않고 모든 항목을 한 번에 가져오고 싶습니다. 반복하지 않고 모든 요소를 ​​구분하십시오. 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> 

내가 순서 원하는 : 내 XML 코드는 31

(198) 166 (122) (76)는이 코드의 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 문제를 해결하는 데 매우 도움이되었습니다. –