从我的XML代码中我想一次性拿走所有项目而不重复。 我的Xml代码是:
<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 :(得分:3)
在XSLT 1.0中对此类问题进行分组的标准方法称为“Muenchian分组” - 基本上您定义了一个密钥,它将应被视为“相同”的节点分组,然后使用使用generate-id
来处理每个组中的第一个节点。
在这种情况下,分组约束是LIGHT_SUPPORT_HEIGHT
值本身和包含NTC_LIGHTLISTPRODUCT
的{{1}}的值的组合:
IMMUTABLE_ID
现在您可以使用
选择唯一值<xsl:key name="supportHeightKey" match="LIGHT_SUPPORT_HEIGHT"
use="concat(., '|', ancestor::NTC_LIGHTLISTPRODUCT[1]/IMMUTABLE_ID)" />