title: If p sub element appears close before the sub element and open after the including child character elements sub element using xslt
body: <p>I have an input xml as:</p>
  <pre><code>&lt;root&gt;
  &lt;p&gt;text &lt;i&gt;2&lt;/i&gt; 1&lt;/p&gt;
  &lt;p&gt;text &lt;i&gt;2&lt;/i&gt;
  &lt;disp-quote&gt;
  &lt;p&gt;text &lt;b&gt;3&lt;/b&gt;&lt;/p&gt;
  &lt;/disp-quote&gt;
  text &lt;b&gt;4&lt;/b&gt;
  &lt;disp-quote&gt;
  &lt;p&gt;text 5&lt;/p&gt;
  &lt;/disp-quote&gt;
  text 6&lt;/p&gt;
  &lt;/root&gt;
  </code></pre>
  <p>I have used the below XSLT transform:</p>
  
  <pre><code>&lt;xsl:stylesheet version=&quot;1.0&quot;  xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;&gt;
    
    &lt;xsl:template match=&quot;*&quot;&gt;
      &lt;xsl:copy&gt;
        &lt;xsl:apply-templates/&gt;
      &lt;/xsl:copy&gt;
    &lt;/xsl:template&gt;
    
    &lt;xsl:template match=&quot;/root/p&quot; &gt;
      &lt;xsl:apply-templates/&gt;
    &lt;/xsl:template&gt;
  
    &lt;xsl:template match=&quot;/root/p/i|root/p/b&quot;/&gt;
      
    &lt;xsl:template match=&quot;/root/p/text()[normalize-space()!='']&quot;&gt;
      &lt;p&gt;
        &lt;xsl:copy-of select=&quot;preceding-sibling::node()[1][self::i|self::b]&quot;/&gt;
        &lt;xsl:copy-of select=&quot;.&quot;/&gt;
        &lt;xsl:copy-of select=&quot;following-sibling::node()[1][self::i|self::b]&quot;/&gt;
      &lt;/p&gt;
    &lt;/xsl:template&gt;
    
  &lt;/xsl:stylesheet&gt;
  </code></pre>
  <p>Getting output as divided p element and repeated character element and text but I need in single p element text:</p>
  <pre><code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&lt;root&gt;
  &lt;p&gt;text &lt;i&gt;2&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;2&lt;/i&gt;1&lt;/p&gt;
  &lt;p&gt;text &lt;i&gt;2&lt;/i&gt;&lt;/p&gt;
  &lt;p&gt;&lt;disp-quote&gt;
  &lt;p&gt;text &lt;b&gt;3&lt;/b&gt;&lt;/p&gt;
  &lt;/disp-quote&gt;
  text &lt;b&gt;4&lt;/b&gt;&lt;/p&gt;
  &lt;p&gt;&lt;disp-quote&gt;
  &lt;p&gt;text 5&lt;/p&gt;
  &lt;/disp-quote&gt;
  text 6&lt;/p&gt;
  &lt;/root&gt;
  </code></pre>
  <p>Need output as close p for each sub element closing appears
  output as:</p>
  <pre><code>&lt;root&gt;
  &lt;p&gt;text &lt;i&gt;2&lt;/i&gt; 1&lt;/p&gt;
  &lt;p&gt;text &lt;i&gt;2&lt;/i&gt;&lt;/p&gt;
  &lt;blockquote&gt;
  &lt;p&gt;text &lt;b&gt;3&lt;/b&gt;&lt;/p&gt;
  &lt;/blockquote&gt;
  &lt;p&gt;text &lt;i&gt;4&lt;/i&gt;&lt;/p&gt;
  &lt;blockquote&gt;
  &lt;p&gt;text 5&lt;/p&gt;
  &lt;/blockquote&gt;
  &lt;p&gt;text 6&lt;/p&gt;
  &lt;/root&gt;
  </code></pre>
  <p>Thanks in advance</p>