从我的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),我使用它来保持在该节点内。
"你"能给我更多的指示吗?感谢
XSLT1.0中对此类问题进行分组的标准方法被称为"Muenchian分组"——本质上,您定义了一个键,该键对应该被视为"相同"的节点进行分组,然后使用generate-id
技巧只处理每个组中的第一个节点。
在这种情况下,分组约束是LIGHT_SUPPORT_HEIGHT
值本身和包含NTC_LIGHTLISTPRODUCT
的IMMUTABLE_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>