【问题标题】:Get unique nodes based on attribute value xslt 1.0根据属性值 xslt 1.0 获取唯一节点
【发布时间】:2019-01-25 01:10:52
【问题描述】:

我在变量中有以下 xml,我需要在 xslt 1.0 中获取唯一节点

    <out2:PrintRequest>
        <Passenger FirstNameNumber="01" LastNameNumber="01"/>
        <Passenger FirstNameNumber="01" LastNameNumber="02"/>
        <Passenger FirstNameNumber="01" LastNameNumber="01"/>
        <Passenger FirstNameNumber="01" LastNameNumber="02"/>
    </out2:PrintRequest>

================================== 预期输出:

    <out2:PrintRequest>
        <Passenger FirstNameNumber="01" LastNameNumber="01"/>
        <Passenger FirstNameNumber="01" LastNameNumber="02"/>
    </out2:PrintRequest>

【问题讨论】:

    标签: xslt xpath


    【解决方案1】:

    您可以使用Meunchian method 进行分组,方法是使用@FirstNameNumber@LastNameNumber 属性中的值为Passenger 元素创建xsl:key,以构造键的查找值,迭代每个@ 987654327@ 元素,如果该元素是从 xsl:key 检索到的第一个元素,则复制该元素。

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:out2="out2">
      <xsl:output indent="yes"/>
    
      <xsl:key name="passengers-by-num" match="Passenger" use="concat(@FirstNameNumber,@LastNameNumber)"/>
    
      <xsl:template match="out2:PrintRequest">
        <xsl:copy>
            <xsl:for-each select="Passenger[generate-id() = generate-id(key('passengers-by-num', concat(@FirstNameNumber,@LastNameNumber)[1]))]">
                <xsl:copy-of select="."/>          
          </xsl:for-each>
        </xsl:copy>
      </xsl:template>
    
    </xsl:stylesheet>
    

    如果您可以使用 XSLT 2.0(或 3.0),那么这会更容易一些。你可以使用xsl:for-each-group:

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xmlns:out2="out2">
      <xsl:output indent="yes"/>
    
      <xsl:template match="out2:PrintRequest">
        <xsl:copy>
            <xsl:for-each-group select="Passenger" group-by="concat(@FirstNameNumber,@LastNameNumber)">
                <xsl:copy-of select="."/>          
          </xsl:for-each-group>
        </xsl:copy>
      </xsl:template>
    
    </xsl:stylesheet>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      • 2016-10-11
      • 2023-03-16
      • 2021-08-24
      • 1970-01-01
      相关资源
      最近更新 更多