title: update the variable in xslt
body: <p>XML:</p>
  
  <pre><code>&lt;sample&gt;
      &lt;test&gt;
          &lt;Cell1&gt;John&lt;/Cell1&gt;
          &lt;Cell2&gt;A&lt;/Cell2&gt;
          &lt;Cell4&gt;xy&lt;/Cell4&gt;
      &lt;/test&gt;
      &lt;test&gt;
          &lt;Cell1&gt;John&lt;/Cell1&gt;
          &lt;Cell2&gt;B&lt;/Cell2&gt;
          &lt;Cell6&gt;10&lt;/Cell6&gt;
      &lt;/test&gt;
      &lt;test&gt;
          &lt;Cell1&gt;John,Jade&lt;/Cell1&gt;
          &lt;Cell2&gt;A,Y&lt;/Cell2&gt;
          &lt;Cell4&gt;1&lt;/Cell4&gt;
      &lt;/test&gt;
      &lt;test&gt;
          &lt;Cell1&gt;John,Jade&lt;/Cell1&gt;
          &lt;Cell2&gt;A C,X&lt;/Cell2&gt;
      &lt;/test&gt;
      &lt;test&gt;
          &lt;Cell1&gt;John,Jade&lt;/Cell1&gt;
          &lt;Cell2&gt;C D,Y&lt;/Cell2&gt;
      &lt;/test&gt;
      &lt;test&gt;
          &lt;Cell1&gt;John&lt;/Cell1&gt;
          &lt;Cell2&gt;A B&lt;/Cell2&gt;
          &lt;Cell4&gt;xy&lt;/Cell4&gt;
      &lt;/test&gt;
  &lt;/sample&gt;
  </code></pre>
  
  <p>XSLT:</p>
  
  <pre><code>&lt;xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs"&gt;
      &lt;xsl:output method="xml" encoding="UTF-8" indent="no"/&gt;
      &lt;xsl:template match="/"&gt;
          &lt;xsl:apply-templates select="sample"/&gt;
      &lt;/xsl:template&gt;
      &lt;xsl:template match="sample"&gt;
          &lt;xsl:variable name="atomictest"&gt;
              &lt;!--Store the test containing only one value in cell2--&gt;
              &lt;xsl:copy-of select="test[not(contains(Cell2,',')) or not(contains(Cell2,' '))]"/&gt;
          &lt;/xsl:variable&gt;
          &lt;xsl:variable name="copy"&gt;
              &lt;xsl:apply-templates select="test"&gt;
                  &lt;xsl:with-param name="atomictest" select="$atomictest"/&gt;
              &lt;/xsl:apply-templates&gt;
          &lt;/xsl:variable&gt;
      &lt;/xsl:template&gt;
      &lt;xsl:template match="test"&gt;
          &lt;xsl:param name="atomictest"/&gt;
          &lt;xsl:choose&gt;
              &lt;xsl:when test="contains(Cell2,',')"&gt;
                  &lt;xsl:variable name="Cell1"&gt;
                      &lt;xsl:copy-of select="Cell1"/&gt;
                  &lt;/xsl:variable&gt;
                  &lt;!-- tokenize cell2 based on comma --&gt;
                  &lt;xsl:for-each select="tokenize(Cell2,',')"&gt;
                      &lt;xsl:variable name="str"&gt;
                          &lt;xsl:value-of select="."/&gt;
                      &lt;/xsl:variable&gt;
                      &lt;xsl:variable name="pos"&gt;
                          &lt;xsl:value-of select="position()"/&gt;
                      &lt;/xsl:variable&gt;
                      &lt;xsl:choose&gt;
                          &lt;!-- If cell2 contains space --&gt;
                          &lt;xsl:when test="contains(.,' ')"&gt;
                              &lt;!-- tokenize cell2 based on comma --&gt;
                              &lt;xsl:for-each select="tokenize(.,' ')"&gt;
                                  &lt;xsl:variable name="str"&gt;
                                      &lt;xsl:value-of select="."/&gt;
                                  &lt;/xsl:variable&gt;
                                  &lt;!-- if cell2 value not contained in the atomic collected --&gt;
                                  &lt;xsl:if test="not($atomictest/test[normalize-space(Cell2/text())=normalize-space($str)])"&gt;
                                      &lt;!--Store Cell2 value --&gt;
                                      &lt;xsl:variable name="Cell2"&gt;
                                          &lt;xsl:value-of select="."/&gt;
                                      &lt;/xsl:variable&gt;
                                      &lt;!-- tokenize cell1--&gt;
                                      &lt;xsl:for-each select="tokenize($Cell1/Cell1,',')"&gt;
                                          &lt;xsl:if test="position()=$pos"&gt;
                                              &lt;test&gt;
                                                  &lt;Cell1&gt;
                                                      &lt;xsl:value-of select="."/&gt;
                                                  &lt;/Cell1&gt;
                                                  &lt;Cell2&gt;
                                                      &lt;xsl:value-of select="$Cell2"/&gt;
                                                  &lt;/Cell2&gt;
                                              &lt;/test&gt;
                                          &lt;/xsl:if&gt;
                                      &lt;/xsl:for-each&gt;
                                  &lt;/xsl:if&gt;
                              &lt;/xsl:for-each&gt;
                          &lt;/xsl:when&gt;
                          &lt;xsl:otherwise&gt;
                              &lt;!-- if cell2 doesnot contains space --&gt;
                              &lt;xsl:if test="not($atomictest/test[normalize-space(Cell2/text())=normalize-space($str)])"&gt;
                                  &lt;xsl:variable name="Cell2"&gt;
                                      &lt;xsl:value-of select="."/&gt;
                                  &lt;/xsl:variable&gt;
                                  &lt;xsl:for-each select="tokenize($Cell1/Cell1,',')"&gt;
                                      &lt;xsl:if test="position()=$pos"&gt;
                                          &lt;test&gt;
                                              &lt;Cell1&gt;
                                                  &lt;xsl:value-of select="."/&gt;
                                              &lt;/Cell1&gt;
                                              &lt;Cell2&gt;
                                                  &lt;xsl:value-of select="$Cell2"/&gt;
                                              &lt;/Cell2&gt;
                                          &lt;/test&gt;
                                      &lt;/xsl:if&gt;
                                  &lt;/xsl:for-each&gt;
                              &lt;/xsl:if&gt;
                          &lt;/xsl:otherwise&gt;
                      &lt;/xsl:choose&gt;
                  &lt;/xsl:for-each&gt;
              &lt;/xsl:when&gt;
              &lt;xsl:when test="contains(Cell2,' ')"&gt;
                  &lt;xsl:variable name="Cell1"&gt;
                      &lt;xsl:copy-of select="Cell1"/&gt;
                  &lt;/xsl:variable&gt;
                  &lt;!-- tokenize cell2 based on space or comma --&gt;
                  &lt;xsl:for-each select="tokenize(Cell2,' ')"&gt;
                      &lt;xsl:variable name="str"&gt;
                          &lt;xsl:value-of select="."/&gt;
                      &lt;/xsl:variable&gt;
                      &lt;xsl:variable name="pos"&gt;
                          &lt;xsl:value-of select="position()"/&gt;
                      &lt;/xsl:variable&gt;
                      &lt;!-- if cell2 value not contained in the atomic rows collected --&gt;
                      &lt;xsl:if test="not($atomictest/test[normalize-space(Cell2/text())=normalize-space($str)])"&gt;
                          &lt;xsl:if test="position()=$pos"&gt;
                              &lt;test&gt;
                                  &lt;Cell1&gt;
                                      &lt;xsl:value-of select="$Cell1"/&gt;
                                  &lt;/Cell1&gt;
                                  &lt;Cell2&gt;
                                      &lt;xsl:value-of select="$str"/&gt;
                                  &lt;/Cell2&gt;
                              &lt;/test&gt;
                          &lt;/xsl:if&gt;
                      &lt;/xsl:if&gt;
                  &lt;/xsl:for-each&gt;
              &lt;/xsl:when&gt;
              &lt;xsl:otherwise&gt;
                  &lt;test&gt;
                      &lt;Cell1&gt;
                          &lt;xsl:value-of select="Cell1"/&gt;
                      &lt;/Cell1&gt;
                      &lt;Cell2&gt;
                          &lt;xsl:value-of select="Cell2"/&gt;
                      &lt;/Cell2&gt;
                  &lt;/test&gt;
              &lt;/xsl:otherwise&gt;
          &lt;/xsl:choose&gt;
      &lt;/xsl:template&gt;
  &lt;/xsl:stylesheet&gt;
  </code></pre>
  
  <ol>
  <li>I have stored the cell2 that contains a single value in atomictest variable</li>
  <li>Check if Cell2 contains comma. if true tokenize Cell2 based on comma and check if the tokenized Cell2 value is there in atomic test -> if no then add Cell2 and Cell1 value to the output</li>
  <li>I would like to update the newly added Cell1 and Cell2 values in the output to the atomictest variable so that if I come through the same Cell2 value the next time I need to skip it. How to do this??</li>
  </ol>
  
  <p>The output which I get:</p>
  
  <pre><code>&lt;test&gt;
      &lt;Cell1&gt;John&lt;/Cell1&gt;
      &lt;Cell2&gt;A&lt;/Cell2&gt;
  &lt;/test&gt;
  &lt;test&gt;
      &lt;Cell1&gt;John&lt;/Cell1&gt;
      &lt;Cell2&gt;B&lt;/Cell2&gt;
  &lt;/test&gt;
  &lt;test&gt;
      &lt;Cell1&gt;Jade&lt;/Cell1&gt;
      &lt;Cell2&gt;Y&lt;/Cell2&gt;
  &lt;/test&gt;
  &lt;test&gt;
      &lt;Cell1&gt;John&lt;/Cell1&gt;
      &lt;Cell2&gt;C&lt;/Cell2&gt;
  &lt;/test&gt;
  &lt;test&gt;
      &lt;Cell1&gt;Jade&lt;/Cell1&gt;
      &lt;Cell2&gt;X&lt;/Cell2&gt;
  &lt;/test&gt;
  &lt;test&gt;
      &lt;Cell1&gt;John&lt;/Cell1&gt;
      &lt;Cell2&gt;C&lt;/Cell2&gt;
  &lt;/test&gt;
  &lt;test&gt;
      &lt;Cell1&gt;John&lt;/Cell1&gt;
      &lt;Cell2&gt;D&lt;/Cell2&gt;
  &lt;/test&gt;
  &lt;test&gt;
      &lt;Cell1&gt;Jade&lt;/Cell1&gt;
      &lt;Cell2&gt;Y&lt;/Cell2&gt;
  &lt;/test&gt;
  </code></pre>
  
  <p>Resulting output should look like the following:</p>
  
  <pre><code>&lt;test&gt;
          &lt;Cell1&gt;John&lt;/Cell1&gt;
          &lt;Cell2&gt;A&lt;/Cell2&gt;
      &lt;/test&gt;
      &lt;test&gt;
          &lt;Cell1&gt;John&lt;/Cell1&gt;
          &lt;Cell2&gt;B&lt;/Cell2&gt;
      &lt;/test&gt;
      &lt;test&gt;
          &lt;Cell1&gt;Jade&lt;/Cell1&gt;
          &lt;Cell2&gt;Y&lt;/Cell2&gt;
      &lt;/test&gt;
      &lt;test&gt;
          &lt;Cell1&gt;John&lt;/Cell1&gt;
          &lt;Cell2&gt;C&lt;/Cell2&gt;
      &lt;/test&gt;
      &lt;test&gt;
          &lt;Cell1&gt;Jade&lt;/Cell1&gt;
          &lt;Cell2&gt;X&lt;/Cell2&gt;
      &lt;/test&gt;
      &lt;test&gt;
          &lt;Cell1&gt;John&lt;/Cell1&gt;
          &lt;Cell2&gt;D&lt;/Cell2&gt;
      &lt;/test&gt;
  </code></pre>