title: VBA Parse XML using XMLDocument
body: <p>Please Help.
  I want to read the following XML Document:</p>
  
  <pre><code>&lt;DATA&gt;
      &lt;LEVEL_1&gt;
          &lt;col_1&gt;ALevel1_col1&lt;/col_1&gt;
          &lt;col_2&gt;ALevel1_col2&lt;/col_2&gt;
          &lt;LEVEL_2&gt;
              &lt;col_1&gt;BLevel2_col1&lt;/col_1&gt;
              &lt;col_2&gt;BLevel2_col2&lt;/col_2&gt;
              &lt;LEVEL_3&gt;
                  &lt;col_1&gt;CLevel3_col1&lt;/col_1&gt;
                  &lt;col_2&gt;CLevel3_col2&lt;/col_2&gt;
              &lt;/LEVEL_3&gt;
          &lt;/LEVEL_2&gt;
          &lt;LEVEL_2&gt;
              &lt;col_1&gt;B_Level2_col1&lt;/col_1&gt;
              &lt;col_2&gt;B_Level2_col2&lt;/col_2&gt;
          &lt;/LEVEL_2&gt;
      &lt;/LEVEL_1&gt;
      &lt;LEVEL_1&gt;
          &lt;col_1&gt;XLevel1_col1&lt;/col_1&gt;
          &lt;col_2&gt;XLevel1_col2&lt;/col_2&gt;
          &lt;LEVEL_2&gt;
              &lt;col_1&gt;YLevel2_col1&lt;/col_1&gt;
              &lt;col_2&gt;YLevel2_col2&lt;/col_2&gt;
              &lt;LEVEL_3&gt;
                  &lt;col_1&gt;ZLevel3_col1&lt;/col_1&gt;
                  &lt;col_2&gt;ZLevel3_col2&lt;/col_2&gt;
              &lt;/LEVEL_3&gt;
          &lt;/LEVEL_2&gt;
          &lt;LEVEL_2&gt;
              &lt;col_1&gt;Y_Level2_col1&lt;/col_1&gt;
              &lt;col_2&gt;Y_Level2_col2&lt;/col_2&gt;
          &lt;/LEVEL_2&gt;
      &lt;/LEVEL_1&gt;
  &lt;/DATA&gt;
  </code></pre>
  
  <p>I want output like this:</p>
  
  <pre><code>ALevel1_col1
  ALevel1_col2
      BLevel2_col1
      BLevel2_col2
          CLevel3_col1
          CLevel3_col2
      B_Level2_col1
      B_Level2_col2
  
  XLevel1_col1
  XLevel1_col2
      YLevel2_col1
      YLevel2_col2
          ZLevel3_col1
          ZLevel3_col2
      Y_Level2_col1
      Y_Level2_col2
  </code></pre>
  
  <p>So far, what I have obtained is like this:</p>
  
  <pre><code>Sub test()
      'On Error Resume Next
      Dim sXml
      sXml = "&lt;DATA&gt;" &amp; _
          "   &lt;LEVEL_1&gt;" &amp; _
          "       &lt;col_1&gt;ALevel1_col1&lt;/col_1&gt;" &amp; _
          "       &lt;col_2&gt;ALevel1_col2&lt;/col_2&gt;" &amp; _
          "       &lt;LEVEL_2&gt;" &amp; _
          "           &lt;col_1&gt;BLevel2_col1&lt;/col_1&gt;" &amp; _
          "           &lt;col_2&gt;BLevel2_col2&lt;/col_2&gt;" &amp; _
          "           &lt;LEVEL_3&gt;" &amp; _
          "               &lt;col_1&gt;CLevel3_col1&lt;/col_1&gt;" &amp; _
          "               &lt;col_2&gt;CLevel3_col2&lt;/col_2&gt;" &amp; _
          "           &lt;/LEVEL_3&gt;" &amp; _
          "       &lt;/LEVEL_2&gt;" &amp; _
          "       &lt;LEVEL_2&gt;" &amp; _
          "           &lt;col_1&gt;B_Level2_col1&lt;/col_1&gt;" &amp; _
          "           &lt;col_2&gt;B_Level2_col2&lt;/col_2&gt;" &amp; _
          "       &lt;/LEVEL_2&gt;" &amp; _
          "   &lt;/LEVEL_1&gt;"
  
      sXml = sXml &amp; "   &lt;LEVEL_1&gt;" &amp; _
          "       &lt;col_1&gt;XLevel1_col1&lt;/col_1&gt;" &amp; _
          "       &lt;col_2&gt;XLevel1_col2&lt;/col_2&gt;" &amp; _
          "       &lt;LEVEL_2&gt;" &amp; _
          "           &lt;col_1&gt;YLevel2_col1&lt;/col_1&gt;" &amp; _
          "           &lt;col_2&gt;YLevel2_col2&lt;/col_2&gt;" &amp; _
          "           &lt;LEVEL_3&gt;" &amp; _
          "               &lt;col_1&gt;ZLevel3_col1&lt;/col_1&gt;" &amp; _
          "               &lt;col_2&gt;ZLevel3_col2&lt;/col_2&gt;" &amp; _
          "           &lt;/LEVEL_3&gt;" &amp; _
          "       &lt;/LEVEL_2&gt;" &amp; _
          "       &lt;LEVEL_2&gt;" &amp; _
          "           &lt;col_1&gt;Y_Level2_col1&lt;/col_1&gt;" &amp; _
          "           &lt;col_2&gt;Y_Level2_col2&lt;/col_2&gt;" &amp; _
          "       &lt;/LEVEL_2&gt;" &amp; _
          "   &lt;/LEVEL_1&gt;" &amp; _
          "&lt;/DATA&gt;"
  
      Set XmlDoc = CreateObject("MSXML2.DOMDocument")
      XmlDoc.async = False
      XmlDoc.LoadXML (sXml)
      'Debug.Print XmlDoc.XML
  
      For Each LEVEL_1 In XmlDoc.SelectNodes("//DATA/LEVEL_1")
          'Debug.Print LEVEL_1.XML
          Debug.Print LEVEL_1.SelectSingleNode("col_1").Text
          Debug.Print LEVEL_1.SelectSingleNode("col_2").Text
  
          For Each LEVEL_2 In LEVEL_1.SelectNodes("//LEVEL_2")
              'Debug.Print LEVEL_2.XML
              Debug.Print vbTab &amp; LEVEL_2.SelectSingleNode("col_1").Text
              Debug.Print vbTab &amp; LEVEL_2.SelectSingleNode("col_2").Text
  
              For Each LEVEL_3 In LEVEL_2.SelectNodes("//LEVEL_3")
                  'Debug.Print LEVEL_3.XML
                  Debug.Print vbTab &amp; LEVEL_3.SelectSingleNode("col_1").Text
                  Debug.Print vbTab &amp; LEVEL_3.SelectSingleNode("col_2").Text
              Next
          Next
      Next
  End Sub
  </code></pre>
  
  <p>with output:</p>
  
  <blockquote>
  <pre><code>ALevel1_col1
  ALevel1_col2
      BLevel2_col1
      BLevel2_col2
      CLevel3_col1
      CLevel3_col2
      ZLevel3_col1
      ZLevel3_col2
      B_Level2_col1
      B_Level2_col2
      CLevel3_col1
      CLevel3_col2
      ZLevel3_col1
      ZLevel3_col2
      YLevel2_col1
      YLevel2_col2
      CLevel3_col1
      CLevel3_col2
      ZLevel3_col1
      ZLevel3_col2
      Y_Level2_col1
      Y_Level2_col2
      CLevel3_col1
      CLevel3_col2
      ZLevel3_col1
      ZLevel3_col2
  XLevel1_col1
  XLevel1_col2
      BLevel2_col1
      BLevel2_col2
      CLevel3_col1
      CLevel3_col2
      ZLevel3_col1
      ZLevel3_col2
      B_Level2_col1
      B_Level2_col2
      CLevel3_col1
      CLevel3_col2
      ZLevel3_col1
      ZLevel3_col2
      YLevel2_col1
      YLevel2_col2
      CLevel3_col1
      CLevel3_col2
      ZLevel3_col1
      ZLevel3_col2
      Y_Level2_col1
      Y_Level2_col2
      CLevel3_col1
      CLevel3_col2
      ZLevel3_col1
      ZLevel3_col2
  </code></pre>
  </blockquote>
  
  <p>Can anyone help please?</p>
  
  <p>Thanks.</p>