XSLT1.0删除重复节点

时间:2016-04-30 17:55:28

标签: xslt-1.0

我正在尝试应用Muenchian分组来消除重复的节点,但我似乎无法使其工作。

输入:

<GetUsersByRoleRspMsg>
   <UserList>
      <User>
         <UserId>PPAUSER1</UserId>
         <Email>xyz@gmail.com</Email>         
      </User>
      <User>
         <UserId>PPAUSER1</UserId>
         <Email>xyz@gmail.com</Email>         
      </User>      
   </UserList>
</GetUsersByRoleRspMsg>

必需:

<GetUsersByRoleRspMsg>
   <UserList>
      <User>
         <UserId>PPAUSER1</UserId>
         <Email>xyz@gmail.com</Email>         
      </User>      
   </UserList>
</GetUsersByRoleRspMsg>

我的代码的关键部分是

<xsl:key name="userIdEmailPair" 
         match="User" 
         use="concat(UserId,' ',Email)"/> 

<xsl:copy> 
  <xsl:for-each select="User[
    count(. | key('userIdEmailPair',
                  concat(UserId,' ',Email))[1])
    = 1]"> 
    <xsl:copy-of select="."/> 
  </xsl:for-each> 
</xsl:copy>

1 个答案:

答案 0 :(得分:1)

我发现您的分组代码没有任何问题。如果您尝试:

<xsl:template match="UserList">
   <xsl:copy>
      <xsl:copy-of select="User[count(. | key('userIdEmailPair',concat(UserId,' ',Email))[1]) = 1]"/>
   </xsl:copy>
</xsl:template>

您将获得您正在寻找的结果。

当然,您可以将最后一个模板缩短为:

# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]