Xml 在不重复xslt 1.0的情况下使所有元素都不同

Xml 在不重复xslt 1.0的情况下使所有元素都不同,xml,xslt-1.0,Xml,Xslt 1.0,从我的XML代码中,我希望一次获取所有项目,而不重复。 我的Xml代码是: <NTC_LIGHTLISTPRODUCT> <IMMUTABLE_ID>9814</IMMUTABLE_ID> <LIGHT_DESCRIPTION_LIST> <LIGHT_DESCRIPTION>

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

9814
198
166
122
76
31
31
我要序列号: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是当前节点的一个变量(不可变ID),我使用它来保持在这个节点内


“你”能给我更多的指示吗?感谢XSLT 1.0中对此类问题进行分组的标准方法称为“Muenchian分组”-本质上是定义一个键,将应视为“相同”的节点分组,然后使用
生成id的技巧来处理每个组中的第一个节点

在这种情况下,分组约束是
LIGHT\u SUPPORT\u HEIGHT
值本身和包含
NTC\u LIGHTLISTPRODUCT
不可变\u 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>

XSLT 1.0中对此类问题进行分组的标准方法称为“Muenchian分组”——本质上是定义一个键,将应视为“相同”的节点分组,然后使用
生成id的技巧来处理每个组中的第一个节点

在这种情况下,分组约束是
LIGHT\u SUPPORT\u HEIGHT
值本身和包含
NTC\u LIGHTLISTPRODUCT
不可变\u 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>

XSLT 1.0中对此类问题进行分组的标准方法称为“Muenchian分组”——本质上是定义一个键,将应视为“相同”的节点分组,然后使用
生成id的技巧来处理每个组中的第一个节点

在这种情况下,分组约束是
LIGHT\u SUPPORT\u HEIGHT
值本身和包含
NTC\u LIGHTLISTPRODUCT
不可变\u 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>

XSLT 1.0中对此类问题进行分组的标准方法称为“Muenchian分组”——本质上是定义一个键,将应视为“相同”的节点分组,然后使用
生成id的技巧来处理每个组中的第一个节点

在这种情况下,分组约束是
LIGHT\u SUPPORT\u HEIGHT
值本身和包含
NTC\u LIGHTLISTPRODUCT
不可变\u 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>


您的代码片段与示例XML不匹配-不可变\u ID从何而来?不可变\u ID是标识每个节点的变量。。。此节点说明有很多。您的代码片段与示例XML不匹配-
IMMUTABLE\u ID
来自何处?IMMUTABLE\u ID是标识每个节点的变量。。。此节点说明有很多。您的代码片段与示例XML不匹配-
IMMUTABLE\u ID
来自何处?IMMUTABLE\u ID是标识每个节点的变量。。。此节点说明有很多。您的代码片段与示例XML不匹配-
IMMUTABLE\u ID
来自何处?IMMUTABLE\u ID是标识每个节点的变量。。。此节点有很多描述。感谢您的解释对理解e解决我的XSLT问题非常有帮助。感谢您的解释对理解e解决我的XSLT问题非常有帮助。感谢您的解释对理解e解决我的XSLT问题非常有帮助。感谢您的解释对理解e解决我的XSLT问题非常有帮助理解并解决我的XSLT问题。