2013-06-06 2 views
0

안녕하세요 저는 XSLT의 가끔 사용자이므로 분명히 분명하지는 않지만 잘하면 누군가가 지적 할 수 있습니다!그룹이나 종류 또는 다른 것이 필요한지 확실하지 않다

원본 XML의 구조는 다음과 같습니다.

<test> 
    <input>a</input> 
    <input>b</input> 
    <input>c</input> 
    <input>d</input> 
    <input>e</input> 
</test> 

XSL 파일에는 다음과 같은 처리 명령이 포함되어 있습니다.

<xsl:template name="convertInputToNumeric"> 
    <xsl:param name="inputs" /> 
     <xsl:for-each select="input"> 
      <NumericCode> 
       <xsl:call-template name="toNumericCode"> 
        <xsl:with-param name="type">Input</xsl:with-param> 
        <xsl:with-param name="" select="." /> 
       </xsl:call-template> 
      </NumericCode> 
     </xsl:for-each> 
</xsl:template> 

호출 템플릿 'toNumericCode는'입력 '는이'값 '001'때문에

<Conversion type="Input"> 
    <Convert> 
      <FROM>a</FROM> 
      <TO>001</TO> 
     </Convert> 
    <Convert> 
       <FROM>b</FROM> 
       <TO>002</TO> 
     </Convert> 
    <Convert> 
       <FROM>c</FROM> 
       <TO>001</TO> 
     </Convert> 
    <Convert> 
       <FROM>d</FROM> 
       <TO>001</TO> 
    </Convert> 
     <Convert> 
       <FROM>e</FROM> 
       <TO>002</TO> 
    </Convert> 
    </Conversion> 

을 반환 예를 들어 입력 숫자 표현을 파일 현재의 입력을 받아, 다른 XML로 조회 나는 현재

<test> 
    <NumericCode>001</NumericCode> 
    <NumericCode>002</NumericCode> 
    <NumericCode>001</NumericCode> 
    <NumericCode>001</NumericCode> 
    <NumericCode>002</NumericCode> 
</test> 

하지만를 얻을 XSL을 실행 실제로 내가 원하는 것은 내가 단지 별개의 노드가

,369을 예 얻을 수 있다는 것입니다
<test> 
    <NumericCode>001</NumericCode> 
    <NumericCode>002</NumericCode> 
</test> 

초기 입력 값이 아닌 'toNumericCode'템플릿에서 반환 된 숫자 코드 값을 기반으로 그룹화하려는 경우 어떻게해야 좋을지 모르겠습니까?

답변

0

고유 값()을 사용할 수 있습니다. 나는이 하나를 공유 템플릿을 변경할 수 있고, 보라 :

<xsl:template name="convertInputToNumeric"> 
    <xsl:param name="inputs" /> 
    <xsl:parm name="abc"><xsl:for-each select="input"> 
    <NumericCode> 
     <xsl:call-template name="toNumericCode"> 
     <xsl:with-param name="type">Input</xsl:with-param> 
     <xsl:with-param name="" select="." /> 
     </xsl:call-template> 
    </NumericCode> 
    </xsl:for-each> 
    </xsl:parm> 
    <xsl:for-each select="distinct-values($abc/NumericCode)"> 
    <NumericCode><xsl:value-of select="."/></NumericCode> 
    </xsl:for-each> 
</xsl:template> 

출력 :

<NumericCode>001</NumericCode><NumericCode>002</NumericCode> 
+0

감사합니다! 저에게 저것은 순수한 요술입니다. 비슷한 일을하기 위해 이전에 변수에 할당하려고 시도했지만 프로세서가 방금 불만을 제기했으며 param을 시도하지 않았습니다. 나는 왜 당신의 솔루션이 param과 함께 작동하는지 이해하지 못한다. – user2458974

관련 문제