'Merge 'p' element content under the following 'p element' content
It is list content, right now bullet list and item content appearing separately in the output.
So I want to merge a <p>, Please look expected output and help me on that.
Thanks in advance
Input xml:
<kk>
    <group class="li">
        <line>
            <t style="li">•</t>
        </line>
    </group>
    <group class="p">
        <line>
            <t style="p">content here</t>
        </line>
        <line>
            <t style="p">content here1</t>
        </line>
        <line>
            <t style="p">content here2</t>
        </line>
    </group>    
</kk>
Current Output:
<kk>
    <group class="li">
        <line>
            <t style="li">• content here content here1 content here2</t>
        </line>
    </group>
</kk>
Current XSLT:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">
    
    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
    
    <xsl:template match="p">
        <p>
            <xsl:apply-templates/>
        </p>
    </xsl:template>
    
</xsl:stylesheet>
Expected output:
<kk>
<p>• content here</p>
</kk>
							
						Solution 1:[1]
Here is an example using for-each-group group-starting-with to merge any "group" of elements starting with that bullet:
  <xsl:template match="kk">
    <xsl:copy>
      <xsl:for-each-group select="group" group-starting-with="group[@class = 'li' and ki/p[@class = 'li'] = '•']">
        <p>
          <xsl:value-of select="current-group()//p"/>
        </p>
      </xsl:for-each-group>
    </xsl:copy>
  </xsl:template>
    					Solution 2:[2]
If you need to place all nested p elements following code should help:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="kk group line"/>
<xsl:template match="@* | node()">
    <xsl:copy>
        <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
</xsl:template>
<xsl:template match="kk">
    <xsl:copy>
        <p>
            <xsl:apply-templates/>
        </p>
    </xsl:copy>
</xsl:template>
<xsl:template match="group">
    <xsl:apply-templates/>
</xsl:template>
<xsl:template match="line">
    <xsl:apply-templates/>
</xsl:template>
<xsl:template match="t">
    <xsl:value-of select="concat(., ' ')"/>
</xsl:template>
</xsl:stylesheet>
My local output with provided Input xml:
<kk>
  <p>• content here content here1 content here2 </p>
</kk>
    					Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source | 
|---|---|
| Solution 1 | Martin Honnen | 
| Solution 2 | Dharman | 
