Xslt 如何在单个输出标记中传递多个传入标记

Xslt 如何在单个输出标记中传递多个传入标记,xslt,xslt-1.0,Xslt,Xslt 1.0,我们有一个GivenName字段,它在输入中作为多个标记出现。例如: <PersonName> <Surname>BNWHBQQ</Surname> <GivenName>Adam</GivenName> <GivenName>Sam</GivenName> <GivenName>Peter</GivenName> </

我们有一个GivenName字段,它在输入中作为多个标记出现。例如:

    <PersonName>
      <Surname>BNWHBQQ</Surname>
      <GivenName>Adam</GivenName>
      <GivenName>Sam</GivenName>
      <GivenName>Peter</GivenName>
    </PersonName>
我们需要连接输入中存在的所有GivenName,并将其传递到一个标记中,例如:

    <db:PR_OFFENDER>
        <db:SURNAME>BNWHBQQ</db:SURNAME>
        <db:GIVEN_NAME>Adam Sam Peter</db:GIVEN_NAME>
    </db:PR_OFFENDER>
我试过: 我试着使用for循环,但那没有用,因为我的输出也有倍数,比如:

<xsl:if test="out:PartyEntity/out:Person/out:PersonName/out:GivenName">
                  <xsl:for-each select="out:PartyEntity/out:Person/out:PersonName/out:GivenName">
                    < db:GIVEN_NAME>
                      <xsl:value-of select="normalize-space(.)"/>
                     </db:GIVEN_NAME> 
                  </xsl:for-each>
            </xsl:if>
我可以使用下面这样的东西,但是输出看起来不好,而且我可以在输入中有多个给定的名称,所以这种格式也不起作用

<xsl:value-of select="concat(out:PartyEntity/out:Person/out:PersonName/out:GivenName[1],' ',out:PartyEntity/out:Person/out:PersonName/out:GivenName[2], ' ')"/>
提前感谢,,
Vivek

这样的模板应该正常工作:

    <xsl:if test="out:GivenName">
        <db:GIVEN_NAME>
              <xsl:for-each select="out:GivenName">
                  <xsl:value-of select="normalize-space(.)"/>
                  <xsl:if test="position() != last()">
                  <xsl:text> </xsl:text>
                  </xsl:if>
              </xsl:for-each>
         </db:GIVEN_NAME> 
    </xsl:if>

您可以看到它在这里工作:

您可以发布您已经设置的XSLT吗?谢谢。嗨,在问题中添加了我的设置。非常感谢potame,你太棒了: