This is my XML document
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
xmlns:v="urn:schemas-microsoft-com:vml">
<w:body>
<w:p> <!-- Assume Current Node -->
</w:p>
<w:p>
<w:r>
<w:t>Sample data</w:t>
</w:r>
<w:r>
<w:pict>
<v:group>
<v:shape>
<v:textbox>
<w:txbxContent>
<w:p>
<w:r>
<w:t>Sample data1</w:t>
</w:r>
</w:p>
</w:txbxContent>
</v:textbox>
</v:shape>
<v:shape>
<v:textbox>
<w:txbxContent>
<w:p>
<w:r>
<w:t>Sample data2</w:t>
</w:r>
</w:p>
</w:txbxContent>
</v:textbox>
</v:shape>
</v:group>
</w:pict>
</w:r>
</w:p>
</w:body>
</w:document>
My required XML transformation result should look like this :
<Document>
<paragraph>sample data</paragraph>
<group>
<paragraph>sample data1</paragraph>
<paragraph>sample data1</paragraph>
</group>
</Document>
My current XSLT snippet is
<Document>
<xsl:template match="//w:body/w:p">
<xsl:for-each select="following-sibling::*">
<xsl:choose>
<xsl:when test="self::w:p//v:group">
<xsl:choose>
<xsl:when test="self::w:p[not(ancestor::v:group)]">
<xsl:apply-templates select="self::w:p"><!--this template take care about getting data inside w:p-->
</xsl:apply-templates>
</xsl:when>
</xsl:choose>
<group>
<xsl:apply-templates select="descendant::w:p"> <!--this template take care about getting data inside w:p-->
</xsl:apply-templates>
</group>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</xsl:template>
</Document>
But it produced output like this :
<Document>
<paragraph>sample data</paragraph>
<paragraph>sample data1</paragraph>
<paragraph>sample data2</paragraph>
<group>
<paragraph>sample data1</paragraph>
<paragraph>sample data2</paragraph>
</group>
</Document>
How can I achieve the correct result that I mentioned above?
Try following templates:
it gives:
Update: added new template
<xsl:template match="//w:body/w:p/w:r">to be independent from top level paragraph and group element order