XSLT:如何在 p 元素中连接 t 元素

XSLT: How to concatenate t-Elements within a p-Element

我需要在 p 元素中连接 t 元素。我尝试使用 xsl:for-each-group 并将来自 t 元素的文本存储在一个变量中。但是我不能在 xsl:template.

之外使用这个变量

来源:

<document>
<body>
    <p>
        <pPr>
            <spacing line="286" lineRule="auto"/>       
        </pPr>
        <r>
            <t>First:</t>
        </r>
    </p>
    <p>
        <pPr>
            <numPr>
                <ilvl val="0"/>
                <numId val="17"/>
            </numPr>
            <spacing line="286" lineRule="auto"/>
        </pPr>
        <r>
            <t>Second</t>
        </r>
        <r>
            <t space="preserve"> third</t>
        </r>
        <r>
            <t space="preserve"> </t>
        </r>
        <r>
            <t>last.</t>
        </r>
    </p>
</body>
</document>

期望的结果:

<document>
  <body>
  <p>
     <pPr>
        <spacing line="286" lineRule="auto"/>
     </pPr>
     <r>
        <t>First:</t>
     </r>
  </p>    
  <p>
     <pPr>
        <numPr>
           <ilvl val="0"/>
           <numId val="17"/>
        </numPr>
        <spacing line="286" lineRule="auto"/>
     </pPr>
      <r>
        <t>Second third last.</t>
     </r>
  </p>
 </body>
</document>

到目前为止我的尝试:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:mf="http://example.com/mf"
xmlns:w="www.wnamespace.com"
version="2.0"
exclude-result-prefixes="xs mf w">

<xsl:strip-space elements="*"/>
<xsl:preserve-space elements="t"/>
<xsl:output method="xml" encoding="UTF-8" indent="yes" omit-xml-declaration="no"/>

<xsl:template match="@* | node()">
    <xsl:copy>
        <xsl:apply-templates select="@*, node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="p">
   <xsl:for-each-group select="node()" group-adjacent="boolean(self::r)">
     <xsl:variable name="concat-t">
        <xsl:sequence select="current-group()[self::r]"></xsl:sequence>
    </xsl:variable>
  
    <xsl:choose>
      <xsl:when test="self::r">
      </xsl:when>
      <xsl:otherwise>
        <p><xsl:copy-of select="current-group()"/></p>
      </xsl:otherwise>  
    </xsl:choose>
    
    <t><xsl:value-of select="$concat-t"/></t>
  </xsl:for-each-group>
 </xsl:template>
 </xsl:stylesheet>

我是 XSLT 2.0 的新手,有点不知所措。任何帮助都适用。 XsltFiddle: http://xsltfiddle.liberty-development.net/pNEj9dj

好像恒等变换加上两个模板

  <xsl:template match="p/r[1]">
    <p>
      <t>
        <xsl:value-of select="../r/t"/>
      </t>
    </p>
  </xsl:template>
  
  <xsl:template match="p/r[position() gt 1]"/>

应该完成这项工作。