title: Split XML nodes based on particular text
body: <p>Please suggest for how to split the xml nodes based on particular comment text (&lt;!--Break-->). I tried thru using <strong>xsl:text disable-output-escaping</strong> format to place the required closing and opening tags (elements).</p>
  
  <ul>
  <li>My code is static, how to make that dynamic code which will work for any numbers of ancestor with respect to comment text, i.e., if ancestor count '<strong>n</strong>', then from <strong>n to 1</strong> how to make use of call-template method.</li>
  <li>some empty nodes are presented which are not ancestor to the content, how to avoid these</li>
  </ul>
  
  <p>I referred some suggestions from our site, but find difficult to understand the logics. Please suggest. (XSLT 2 version)</p>
  
  <p>XSLT:</p>
  
  <pre><code>&lt;root&gt;
      &lt;a&gt;
          &lt;b&gt;The text1
              &lt;c&gt;
                  &lt;d&gt;The text2&lt;/d&gt;&lt;d&gt;The text3&lt;/d&gt;&lt;!--Break--&gt;&lt;d&gt;The text4&lt;/d&gt;
                  &lt;e&gt;The text5&lt;!--Break--&gt;&lt;/e&gt;
              &lt;/c&gt;
              &lt;f&gt;The text6&lt;/f&gt;
          &lt;/b&gt;
      &lt;/a&gt;
  &lt;/root&gt;
  </code></pre>
  
  <p>XSLT:</p>
  
  <pre><code>&lt;xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"&gt;
     &lt;xsl:template match="@*|node()"&gt;
       &lt;xsl:copy&gt;&lt;xsl:apply-templates select="node()|@*"/&gt;&lt;/xsl:copy&gt;
     &lt;/xsl:template&gt;
  
     &lt;xsl:template match="//comment()[contains(., 'Break')]"&gt;
         &lt;xsl:variable name="varAncestorCount" select="count(ancestor::*)"/&gt;
         &lt;xsl:choose&gt;
             &lt;xsl:when test="$varAncestorCount = 4"&gt;
                 &lt;xsl:text disable-output-escaping="yes"&gt;&amp;lt;/&lt;/xsl:text&gt;&lt;xsl:value-of select="ancestor::*[1]/name()"/&gt;&lt;xsl:text disable-output-escaping="yes"&gt;&amp;gt;&lt;/xsl:text&gt;
                     &lt;xsl:text disable-output-escaping="yes"&gt;&amp;lt;/&lt;/xsl:text&gt;&lt;xsl:value-of select="ancestor::*[2]/name()"/&gt;&lt;xsl:text disable-output-escaping="yes"&gt;&amp;gt;&lt;/xsl:text&gt;
                         &lt;xsl:text disable-output-escaping="yes"&gt;&amp;lt;/&lt;/xsl:text&gt;&lt;xsl:value-of select="ancestor::*[3]/name()"/&gt;&lt;xsl:text disable-output-escaping="yes"&gt;&amp;gt;&lt;/xsl:text&gt;
                             &lt;xsl:text disable-output-escaping="yes"&gt;&amp;lt;/&lt;/xsl:text&gt;&lt;xsl:value-of select="ancestor::*[4]/name()"/&gt;&lt;xsl:text disable-output-escaping="yes"&gt;&amp;gt;&lt;/xsl:text&gt;
                                 &lt;xsl:comment&gt;&lt;xsl:value-of select="."/&gt;&lt;/xsl:comment&gt;
                             &lt;xsl:text disable-output-escaping="yes"&gt;&amp;lt;&lt;/xsl:text&gt;&lt;xsl:value-of select="ancestor::*[4]/name()"/&gt;&lt;xsl:text disable-output-escaping="yes"&gt;&amp;gt;&lt;/xsl:text&gt;    
                         &lt;xsl:text disable-output-escaping="yes"&gt;&amp;lt;&lt;/xsl:text&gt;&lt;xsl:value-of select="ancestor::*[3]/name()"/&gt;&lt;xsl:text disable-output-escaping="yes"&gt;&amp;gt;&lt;/xsl:text&gt;
                     &lt;xsl:text disable-output-escaping="yes"&gt;&amp;lt;&lt;/xsl:text&gt;&lt;xsl:value-of select="ancestor::*[2]/name()"/&gt;&lt;xsl:text disable-output-escaping="yes"&gt;&amp;gt;&lt;/xsl:text&gt;
                 &lt;xsl:text disable-output-escaping="yes"&gt;&amp;lt;&lt;/xsl:text&gt;&lt;xsl:value-of select="ancestor::*[1]/name()"/&gt;&lt;xsl:text disable-output-escaping="yes"&gt;&amp;gt;&lt;/xsl:text&gt;
             &lt;/xsl:when&gt;
             &lt;xsl:when test="$varAncestorCount = 5"&gt;
                 &lt;xsl:text disable-output-escaping="yes"&gt;&amp;lt;/&lt;/xsl:text&gt;&lt;xsl:value-of select="ancestor::*[1]/name()"/&gt;&lt;xsl:text disable-output-escaping="yes"&gt;&amp;gt;&lt;/xsl:text&gt;
                     &lt;xsl:text disable-output-escaping="yes"&gt;&amp;lt;/&lt;/xsl:text&gt;&lt;xsl:value-of select="ancestor::*[2]/name()"/&gt;&lt;xsl:text disable-output-escaping="yes"&gt;&amp;gt;&lt;/xsl:text&gt;
                         &lt;xsl:text disable-output-escaping="yes"&gt;&amp;lt;/&lt;/xsl:text&gt;&lt;xsl:value-of select="ancestor::*[3]/name()"/&gt;&lt;xsl:text disable-output-escaping="yes"&gt;&amp;gt;&lt;/xsl:text&gt;
                             &lt;xsl:text disable-output-escaping="yes"&gt;&amp;lt;/&lt;/xsl:text&gt;&lt;xsl:value-of select="ancestor::*[4]/name()"/&gt;&lt;xsl:text disable-output-escaping="yes"&gt;&amp;gt;&lt;/xsl:text&gt;
                                 &lt;xsl:text disable-output-escaping="yes"&gt;&amp;lt;/&lt;/xsl:text&gt;&lt;xsl:value-of select="ancestor::*[5]/name()"/&gt;&lt;xsl:text disable-output-escaping="yes"&gt;&amp;gt;&lt;/xsl:text&gt;
                                     &lt;xsl:comment&gt;&lt;xsl:value-of select="."/&gt;&lt;/xsl:comment&gt;
                                 &lt;xsl:text disable-output-escaping="yes"&gt;&amp;lt;&lt;/xsl:text&gt;&lt;xsl:value-of select="ancestor::*[5]/name()"/&gt;&lt;xsl:text disable-output-escaping="yes"&gt;&amp;gt;&lt;/xsl:text&gt;    
                             &lt;xsl:text disable-output-escaping="yes"&gt;&amp;lt;&lt;/xsl:text&gt;&lt;xsl:value-of select="ancestor::*[4]/name()"/&gt;&lt;xsl:text disable-output-escaping="yes"&gt;&amp;gt;&lt;/xsl:text&gt;    
                         &lt;xsl:text disable-output-escaping="yes"&gt;&amp;lt;&lt;/xsl:text&gt;&lt;xsl:value-of select="ancestor::*[3]/name()"/&gt;&lt;xsl:text disable-output-escaping="yes"&gt;&amp;gt;&lt;/xsl:text&gt;
                     &lt;xsl:text disable-output-escaping="yes"&gt;&amp;lt;&lt;/xsl:text&gt;&lt;xsl:value-of select="ancestor::*[2]/name()"/&gt;&lt;xsl:text disable-output-escaping="yes"&gt;&amp;gt;&lt;/xsl:text&gt;
                 &lt;xsl:text disable-output-escaping="yes"&gt;&amp;lt;&lt;/xsl:text&gt;&lt;xsl:value-of select="ancestor::*[1]/name()"/&gt;&lt;xsl:text disable-output-escaping="yes"&gt;&amp;gt;&lt;/xsl:text&gt;
             &lt;/xsl:when&gt;
         &lt;/xsl:choose&gt;
  
     &lt;/xsl:template&gt;
  
   &lt;/xsl:stylesheet&gt;
  </code></pre>
  
  <p>Desired Output:</p>
  
  <pre><code>&lt;root&gt;
      &lt;a&gt;
          &lt;b&gt;The text1
              &lt;c&gt;
                  &lt;d&gt;The text2&lt;/d&gt;
                  &lt;d&gt;The text3&lt;/d&gt;
              &lt;/c&gt;
          &lt;/b&gt;
      &lt;/a&gt;
  &lt;/root&gt;
  &lt;!--Break--&gt;
  &lt;root&gt;
      &lt;a&gt;
          &lt;b&gt;
              &lt;c&gt;
                  &lt;d&gt;The text4&lt;/d&gt;
                  &lt;e&gt;The text5&lt;/e&gt;
              &lt;/c&gt;
          &lt;/b&gt;
      &lt;/a&gt;
  &lt;/root&gt;
  &lt;!--Break--&gt;
  &lt;root&gt;
      &lt;a&gt;
          &lt;b&gt;
              &lt;f&gt;The text6&lt;/f&gt;
          &lt;/b&gt;
      &lt;/a&gt;
  &lt;/root&gt;
  </code></pre>