1

我的 XML 格式如下:

<Items>
  <Item id="1">
  </Item>
  <Item id="2">
  </Item>
  <Item id="1">
  </Item>
  <Item id="3">
  </Item>
</Items>

我正在尝试声明一个 XSLT 2.0 变量,该变量将包含“id”唯一的所有元素。如果“id”不是唯一的,则只应输出第一个实例,以便变量存储:

<Item id="1">
</Item>
<Item id="2">
</Item>
<Item id="3">
</Item>

以下代码将为我提供所有唯一的 @id 属性,但不是它们的父项(项目):

<xsl:variable name="uniqueItems" select="distinct-values(/Items/Item/@id)"/>

我想做这样的事情:

<xsl:variable name="uniqueItems" select="distinct-values(/Items/Item/@id)/parent::node()"/>

但这显然是不正确的。

4

1 回答 1

1

给定

<xsl:key name="id" match="Item" use="@id"/>

你可以使用<xsl:variable name="uniqueItems" select="/Items/Item[not(key('id', @id)[2])]"/>.

或用于for-each-group查找单项组:

<xsl:variable name="uniqueItems" as="element(Item)">
  <xsl:for-each-group select="/Items/Item" group-by="@id">
   <xsl:if test="not(current-group()[2])">
    <xsl:sequence select="."/>
   </xsl:if>
  </xsl:for-each-group>
</xsl:variable>

如果要消除重复项,则使用

<xsl:variable name="uniqueItems" as="element(Item)">
  <xsl:for-each-group select="/Items/Item" group-by="@id">
   <xsl:sequence select="."/>
  </xsl:for-each-group>
</xsl:variable>
于 2013-10-25T13:07:31.540 回答