您好我是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 :(得分: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>