使所有元素不重复xslt 1.0

  • 本文关键字:xslt 元素 xml xslt-1.0
  • 更新时间 :
  • 英文 :


从我的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_LIGHTLISTPRODUCTIMMUTABLE_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>

相关内容

  • 没有找到相关文章