我尝试搜索与重复节点相关的线程并且几乎能够实现,它避免了重复节点,但它输出了最后一个重复节点而不是重复列表中的第一个节点(希望这是有意义的)。 请告诉我这里做错了/错过了什么?
=====XML =====
<node id="j0dp1s8s">
<name key="">ABC</name>
<link type="page" target="">
<value>abc/index</value>
</link>
</node>
<node id="j0dp1s8se">
<name key="">DEF</name>
<link type="page" target="">
<value>def/index</value>
</link>
</node>
<node id="j0dp1s92">
<name key="">XYZ</name>
<link type="page" target="">
<value>abc/index</value>
</link>
</node>
=======XSL=============
<xsl:variable name="unique-list" select="link[not(value=following::link/value)]" />
<xsl:for-each select="$unique-list">
<li><a href="#"><xsl:value-of select="../name" /></a></li>
</xsl:for-each>
Output:
DEF
XYZ
Desired Output:
ABC
DEF
答案 0 :(得分:2)
<强>的Prolog 强>
name
[已弃用] label
nodes
以使您的源XML有效<强> XSLT:强>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="html"/>
<xsl:template match="nodes">
<ul>
<xsl:for-each-group select="node" group-by="link/value">
<li><a href="#"><xsl:value-of select="name" /></a></li>
</xsl:for-each-group>
</ul>
</xsl:template>
</xsl:transform>
因此您可以使用XSLT 2,享受它的简单功能。 https://www.w3.org/TR/xslt20/#element-for-each-group