2013-06-06 122 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」取電流輸入和另一個XML查找文件的數字表示該輸入例如輸入「A」返回值「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> 

所以運行XSL我目前得到

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

,但實際上我想的是,我只得到了明顯的節點,例如

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

我不知道如何做到這一點,因爲我想基於從模板'toNumericCode'返回的數字代碼值進行分組,而不是初始輸入值?

回答

0

您可以使用distinct-values()。有看,我有這一個改變你的共享模板:

<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一起工作。 – user2458974

相關問題