XSLT - 在新父级中对每个值进行分组

XSLT - Group foreach values inside new parent

我正在学习XSLT 1.0,我的逻辑和知识也有点问题。我正在使用 dspace 6,我想更改一些 xslt 行代码的输出。

当我检索一些元数据时:

<xsl:for-each select="doc:metadata/doc:element[@name='dc']/doc:element[@name='date']/doc:element[@name='dateType']/doc:element/doc:field[@name='value']">    
    <creator><xsl:value-of select="." /></creator>    
</xsl:for-each>

我得到:

<creator>Pavel Hitch</creator>
<creator>Adan Riviera</creator>

我想要做的是看起来像这样:

<creators>
    <creator>Pavel Hitch</creator>
    <creator>Adan Riviera</creator>
</creators>

编辑:我的问题是,当我只得到一个值时,只放置 "creator tag",但返回了两个以上的值,添加 "creators" 父级。

我尝试将 "foreach" 输出保存到一个变量中,使用 position() 和 last() 进行一些条件判断,但 "creators" 标签只是重复自身(感谢 te foreach),尝试这给了我一些关闭标签错误:

xsl:for-each select="doc:metadata/doc:element[@name='dc']/doc:element[@name='date']/doc:element[@name='dateType']/doc:element/doc:field[@name='value']">
<xsl:variable name="lastPos" select="last()"/>
<xsl:variable name="initPos" select="position()"/>      

<xsl:if test="$lastPos>'1' and $initPos='1' ">
    <Creators>
</xsl:if>
    <creator><xsl:value-of select="." /></creator>
<xsl:if test="$lastPos = $initPos">
    </Creators>
</xsl:if>
</xsl:for-each>

希望大家能帮帮我,我真的是新手

谢谢! :)

问题是 <creators> tag/element 属于 for-each 循环的 外部 当有多个元素时包围它.

when I get just one value, put the "creator tag" only, but with two o more values returned, add the "creators" parent.

所以这可以使用 xsl:choose 来解决,它计算这两种情况下不同的元素:

<xsl:choose>
  <xsl:when test="count(doc:metadata/doc:element[@name='dc']/doc:element[@name='date']/doc:element[@name='dateType']/doc:element/doc:field[@name='value']) > 1">
    <creators>
      <xsl:for-each select="doc:metadata/doc:element[@name='dc']/doc:element[@name='date']/doc:element[@name='dateType']/doc:element/doc:field[@name='value']">    
        <creator><xsl:value-of select="." /></creator>    
      </xsl:for-each>
    </creators>
  </xsl:when>
  <xsl:otherwise>
    <xsl:for-each select="doc:metadata/doc:element[@name='dc']/doc:element[@name='date']/doc:element[@name='dateType']/doc:element/doc:field[@name='value']">    
      <creator><xsl:value-of select="." /></creator>    
    </xsl:for-each>      
  </xsl:otherwise>      
</xsl:choose>

第二种情况下的xsl:for-each可能是多余的,但它考虑到了没有创作者的(理论上的)可能性。