Click here to Skip to main content
16,004,833 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
How do I feed the following XML to a datagrid view
<root type="object">
  <gstin type="string">24AB3584G1ZL</gstin>
  <fp type="string">082017</fp>
  <b2b type="array">
    <item type="object">
      <ctin type="string">24AC7232H1ZR</ctin>
      <cfs type="string">Y</cfs>
      <cname type="null"></cname>
      <inv type="array">
        <item type="object">
          <itms type="array">
            <item type="object">
              <num type="number">500</num>
              <itm_det type="object">
                <samt type="number">1476.75</samt>
                <rt type="number">5</rt>
                <txval type="number">59070</txval>
                <camt type="number">1476.75</camt>
              </itm_det>
            </item>
          </itms>
          <val type="number">62024</val>
          <inv_typ type="string">R</inv_typ>
          <pos type="string">24</pos>
          <idt type="string">12-08-2017</idt>
          <rchrg type="string">N</rchrg>
          <inum type="string">217/G</inum>
          <chksum type="string">fb9401722f9f9f46cfa8ddf70647ebd47a3ca1094f4c6a17e874aea79296dcb8</chksum>
        </item>
        <item type="object">
          <itms type="array">
            <item type="object">
              <num type="number">500</num>
              <itm_det type="object">
                <samt type="number">1408.38</samt>
                <rt type="number">5</rt>
                <txval type="number">56335</txval>
                <camt type="number">1408.38</camt>
              </itm_det>
            </item>
          </itms>
          <val type="number">59152</val>
          <inv_typ type="string">R</inv_typ>
          <pos type="string">24</pos>
          <idt type="string">12-08-2017</idt>
          <rchrg type="string">N</rchrg>
          <inum type="string">218/G</inum>
          <chksum type="string">d06e30bc81f3ea8f83b735104967f878119a635dd898b33e954f41d87ebacc8c</chksum>
        </item>
        <item type="object">
          <itms type="array">
            <item type="object">
              <num type="number">500</num>
              <itm_det type="object">
                <samt type="number">1393.5</samt>
                <rt type="number">5</rt>
                <txval type="number">55740</txval>
                <camt type="number">1393.5</camt>
              </itm_det>
            </item>
          </itms>
          <val type="number">58527</val>
          <inv_typ type="string">R</inv_typ>
          <pos type="string">24</pos>
          <idt type="string">16-08-2017</idt>
          <rchrg type="string">N</rchrg>
          <inum type="string">222/G</inum>
          <chksum type="string">1a5e45053bf0665455557ea3df6b0d4d170c595b646ed54d52ef561bb66bdf77</chksum>
        </item>
      </inv>
    </item>
    <item type="object">
      <ctin type="string">24AA3022L1ZJ</ctin>
      <cfs type="string">Y</cfs>
      <cname type="null"></cname>
      <inv type="array">
        <item type="object">
          <itms type="array">
            <item type="object">
              <num type="number">1</num>
              <itm_det type="object">
                <csamt type="number">0</csamt>
                <samt type="number">1240.7</samt>
                <rt type="number">5</rt>
                <txval type="number">49628</txval>
                <camt type="number">1240.7</camt>
              </itm_det>
            </item>
          </itms>
          <val type="number">52109</val>
          <inv_typ type="string">R</inv_typ>
          <pos type="string">24</pos>
          <idt type="string">27-08-2017</idt>
          <rchrg type="string">N</rchrg>
          <inum type="string">13/119</inum>
          <chksum type="string">5951d10d389e1b6d9f6b88c536b5fc5f3676b9dd15d977a3fbe741407bd3796f</chksum>
        </item>
      </inv>
    </item>
    <item type="object">
      <ctin type="string">24AI654J1ZX</ctin>
      <cfs type="string">Y</cfs>
      <cname type="null"></cname>
      <inv type="array">
        <item type="object">
          <itms type="array">
            <item type="object">
              <num type="number">1</num>
              <itm_det type="object">
                <csamt type="number">0</csamt>
                <samt type="number">1263.83</samt>
                <rt type="number">5</rt>
                <txval type="number">50553</txval>
                <camt type="number">1263.83</camt>
                <iamt type="number">0</iamt>
              </itm_det>
            </item>
          </itms>
          <val type="number">53080.65</val>
          <inv_typ type="string">R</inv_typ>
          <pos type="string">24</pos>
          <idt type="string">23-08-2017</idt>
          <rchrg type="string">N</rchrg>
          <inum type="string">149</inum>
          <chksum type="string">ed7e5e187ea6349faff81f7e2eb2910a87ec4df0d70f388aa1ba4b46312032ba</chksum>
        </item>
      </inv>
    </item>
    <item type="object">
      <ctin type="string">24A6274F1ZA</ctin>
      <cfs type="string">Y</cfs>
      <cname type="null"></cname>
      <inv type="array">
        <item type="object">
          <itms type="array">
            <item type="object">
              <num type="number">1</num>
              <itm_det type="object">
                <csamt type="number">0</csamt>
                <samt type="number">748.65</samt>
                <rt type="number">5</rt>
                <txval type="number">29946</txval>
                <camt type="number">748.65</camt>
                <iamt type="number">0</iamt>
              </itm_det>
            </item>
          </itms>
          <val type="number">31443</val>
          <inv_typ type="string">R</inv_typ>
          <pos type="string">24</pos>
          <idt type="string">01-08-2017</idt>
          <rchrg type="string">N</rchrg>
          <inum type="string">594</inum>
          <chksum type="string">c3c6c3b9651ded60d8cd58d5659aa99e5f08a50b04e261a647fdd2e55958c03c</chksum>
        </item>
      </inv>
    </item>
    <item type="object">
      <ctin type="string">24AA064Q1ZW</ctin>
      <cfs type="string">Y</cfs>
      <cname type="null"></cname>
      <inv type="array">
        <item type="object">
          <itms type="array">
            <item type="object">
              <num type="number">500</num>
              <itm_det type="object">
                <samt type="number">649.45</samt>
                <rt type="number">5</rt>
                <txval type="number">25978</txval>
                <camt type="number">649.45</camt>
              </itm_det>
            </item>
          </itms>
          <val type="number">27277</val>
          <inv_typ type="string">R</inv_typ>
          <pos type="string">24</pos>
          <idt type="string">04-08-2017</idt>
          <rchrg type="string">N</rchrg>
          <inum type="string">5685/J</inum>
          <chksum type="string">e4809d5e25b7df166fe140851c6d74244807c8de759bfd251cf9f2f06a4fabf5</chksum>
        </item>
        <item type="object">
          <itms type="array">
            <item type="object">
              <num type="number">500</num>
              <itm_det type="object">
                <samt type="number">136.8</samt>
                <rt type="number">5</rt>
                <txval type="number">5472</txval>
                <camt type="number">136.8</camt>
              </itm_det>
            </item>
          </itms>
          <val type="number">5746</val>
          <inv_typ type="string">R</inv_typ>
          <pos type="string">24</pos>
          <idt type="string">05-08-2017</idt>
          <rchrg type="string">N</rchrg>
          <inum type="string">5721/J</inum>
          <chksum type="string">1244f4d49e7a3e50f42bb9b0f87ebd961d4a7d0900c84d5d1feff9788c27b151</chksum>
        </item>
        <item type="object">
          <itms type="array">
            <item type="object">
              <num type="number">500</num>
              <itm_det type="object">
                <samt type="number">130.97</samt>
                <rt type="number">5</rt>
                <txval type="number">5239</txval>
                <camt type="number">130.97</camt>
              </itm_det>
            </item>
          </itms>
          <val type="number">5501</val>
          <inv_typ type="string">R</inv_typ>
          <pos type="string">24</pos>
          <idt type="string">05-08-2017</idt>
          <rchrg type="string">N</rchrg>
          <inum type="string">5753/J</inum>
          <chksum type="string">1eb028428be75cfdc790a0de2f7a9197099166617b46e7a4c9e4a31de17b194f</chksum>
        </item>
        <item type="object">
          <itms type="array">
            <item type="object">
              <num type="number">500</num>
              <itm_det type="object">
                <samt type="number">415.8</samt>
                <rt type="number">5</rt>
                <txval type="number">16632</txval>
                <camt type="number">415.8</camt>
              </itm_det>
            </item>
          </itms>
          <val type="number">17464</val>
          <inv_typ type="string">R</inv_typ>
          <pos type="string">24</pos>
          <idt type="string">08-08-2017</idt>
          <rchrg type="string">N</rchrg>
          <inum type="string">5826/J</inum>
          <chksum type="string">c174a888d8f2ba95c78354ebefcb41d75b37902daf7ca43c2f2b2e022e501dde</chksum>
        </item>
        <item type="object">
          <itms type="array">
            <item type="object">
              <num type="number">500</num>
              <itm_det type="object">
                <samt type="number">272.8</samt>
                <rt type="number">5</rt>
                <txval type="number">10912</txval>
                <camt type="number">272.8</camt>
              </itm_det>
            </item>
          </itms>
          <val type="number">11458</val>
          <inv_typ type="string">R</inv_typ>
          <pos type="string">24</pos>
          <idt type="string">09-08-2017</idt>
          <rchrg type="string">N</rchrg>
          <inum type="string">5866/J</inum>
          <chksum type="string">b1fce912197d109cf4bf19f7b585bbffabe7bcd53772369ce2a2935a0d4162bc</chksum>
        </item>
        <item type="object">
          <itms type="array">
            <item type="object">
              <num type="number">500</num>
              <itm_det type="object">
                <samt type="number">429.35</samt>
                <rt type="number">5</rt>
                <txval type="number">17174</txval>
                <camt type="number">429.35</camt>
              </itm_det>
            </item>
          </itms>
          <val type="number">18033</val>
          <inv_typ type="string">R</inv_typ>
          <pos type="string">24</pos>
          <idt type="string">21-08-2017</idt>
          <rchrg type="string">N</rchrg>
          <inum type="string">6437/J</inum>
          <chksum type="string">3577ce8549a7e8853eb00b0737b2f94352abbbd70f6a12946dc803d4a245895a</chksum>
        </item>
        <item type="object">
          <itms type="array">
            <item type="object">
              <num type="number">500</num>
              <itm_det type="object">
                <samt type="number">288.7</samt>
                <rt type="number">5</rt>
                <txval type="number">11548</txval>
                <camt type="number">288.7</camt>
              </itm_det>
            </item>
          </itms>
          <val type="number">12125</val>
          <inv_typ type="string">R</inv_typ>
          <pos type="string">24</pos>
          <idt type="string">22-08-2017</idt>
          <rchrg type="string">N</rchrg>
          <inum type="string">6470/J</inum>
          <chksum type="string">ef6104e50fceec2e841aaccd2814e522b2c06803fddde53cf2a343e7a551eb32</chksum>
        </item>
        <item type="object">
          <itms type="array">
            <item type="object">
              <num type="number">500</num>
              <itm_det type="object">
                <samt type="number">1515.53</samt>
                <rt type="number">5</rt>
                <txval type="number">60621</txval>
                <camt type="number">1515.53</camt>
              </itm_det>
            </item>
          </itms>
          <val type="number">63652</val>
          <inv_typ type="string">R</inv_typ>
          <pos type="string">24</pos>
          <idt type="string">26-08-2017</idt>
          <rchrg type="string">N</rchrg>
          <inum type="string">6796/J</inum>
          <chksum type="string">8b666418ab813d2030d882e0f18071da91d83adfbe6d7b0ac557d70aad0877ca</chksum>
        </item>
        <item type="object">
          <itms type="array">
            <item type="object">
              <num type="number">500</num>
              <itm_det type="object">
                <samt type="number">1360.13</samt>
                <rt type="number">5</rt>
                <txval type="number">54405</txval>
                <camt type="number">1360.13</camt>
              </itm_det>
            </item>
          </itms>
          <val type="number">57125</val>
          <inv_typ type="string">R</inv_typ>
          <pos type="string">24</pos>
          <idt type="string">28-08-2017</idt>
          <rchrg type="string">N</rchrg>
          <inum type="string">6897/J</inum>
          <chksum type="string">c8fb4ae410a3283c5221e9203167dc1687791a87179850c51a0f15346b317541</chksum>
        </item>
        <item type="object">
          <itms type="array">
            <item type="object">
              <num type="number">500</num>
              <itm_det type="object">
                <samt type="number">342.73</samt>
                <rt type="number">5</rt>
                <txval type="number">13709</txval>
                <camt type="number">342.73</camt>
              </itm_det>
            </item>
          </itms>
          <val type="number">14394</val>
          <inv_typ type="string">R</inv_typ>
          <pos type="string">24</pos>
          <idt type="string">29-08-2017</idt>
          <rchrg type="string">N</rchrg>
          <inum type="string">6931/J</inum>
          <chksum type="string">07ff8bcde46c86e427a2fa850c58d643f2adc32182ec674091c94f2419a787dd</chksum>
        </item>
      </inv>
    </item>
  </b2b>
  <cdn type="array">
    <item type="object">
      <cfs type="string">Y</cfs>
      <ctin type="string">24A0064Q1ZW</ctin>
      <cname type="null"></cname>
      <nt type="array">
        <item type="object">
          <itms type="array">
            <item type="object">
              <num type="number">500</num>
              <itm_det type="object">
                <samt type="number">59.23</samt>
                <rt type="number">5</rt>
                <txval type="number">2369</txval>
                <camt type="number">59.23</camt>
              </itm_det>
            </item>
          </itms>
          <val type="number">2487</val>
          <idt type="string">26-08-2017</idt>
          <ntty type="string">C</ntty>
          <nt_num type="string">65</nt_num>
          <inum type="string">6796/J</inum>
          <rsn type="string">02-Post Sale Discount</rsn>
          <nt_dt type="string">31-08-2017</nt_dt>
          <chksum type="string">ec636db911bbcf11b1aa200c91fe72ee4850e74886530247dc7f54353b912c93</chksum>
          <p_gst type="string">N</p_gst>
        </item>
        <item type="object">
          <itms type="array">
            <item type="object">
              <num type="number">500</num>
              <itm_det type="object">
                <samt type="number">353.98</samt>
                <rt type="number">5</rt>
                <txval type="number">14159</txval>
                <camt type="number">353.98</camt>
              </itm_det>
            </item>
          </itms>
          <val type="number">14867</val>
          <idt type="string">28-08-2017</idt>
          <ntty type="string">C</ntty>
          <nt_num type="string">74/C</nt_num>
          <inum type="string">6897/J</inum>
          <rsn type="string">02-Post Sale Discount</rsn>
          <nt_dt type="string">31-08-2017</nt_dt>
          <chksum type="string">4cf679fd864f55bcc9c4eafb039deddeb6df8ed97b495f4023548946c884b39e</chksum>
          <p_gst type="string">N</p_gst>
        </item>
      </nt>
    </item>
  </cdn>
</root>


What I have tried:

I have tried DataSet.ReadXML but it's not working since there is a common parent and child table.



Need it in this format
RequiredOutput.csv - Google Drive[^]
Posted
Updated 20-Feb-18 1:52am
v2

If your XML is not in a correct format, you will need to use an XmlReader to read it line by line, see example here: [Dotnetperls]
Painful and unwieldy, but that's the way it is I'm afraid :)
 
Share this answer
 
Comments
Maciej Los 19-Feb-18 15:41pm    
Why above xml is NOT in correct format? The structure looks fine.
RickZeeland 19-Feb-18 16:15pm    
I meant in a format that is not easily readable into an xml object like XmlDocument !
Maciej Los 20-Feb-18 2:43am    
Well... this xml document is well formed, so it could be easy read.
ankitpsaraogi 20-Feb-18 1:12am    
Yes. I have tried that. But I wish to automate the process so that it is fed to rows and columns automatically. Can you help me with the code?
RickZeeland 20-Feb-18 2:13am    
I will see what I can do ...
 
Share this answer
 
Comments
ankitpsaraogi 20-Feb-18 1:12am    
Call me outdated but I am using VS 2008. Is it possible there?
Maciej Los 20-Feb-18 2:40am    
Well, i'm not sure that Visual Studion 2008 contain a xsd tool, i doubt.
You can download and install a newer version of Visual Studio (community edition). Then you'll be able to use xsd tool.
I finally cracked it, the trick is to use recursion, here is the updated dynamic version:
using System.Windows.Forms;
using System.Collections.Generic;
using System.Diagnostics;
using System.Xml.Linq;
using System;

namespace DataGridViewXml
{
    public partial class Form2 : Form
    {
        private string xmlpath = @"test.xml";
        public Dictionary<string, int> dgvHeaders;
        public BindingSource dgvSource;
        public object[] dgvRow;

        public Form2()
        {
            InitializeComponent();
            this.Run();
        }

        public void Run()
        {
            dgvHeaders = new Dictionary<string, int>();
            XElement xelement = XElement.Load(xmlpath);

            GetHeaders(xelement);

            foreach (var header in dgvHeaders)
            {
                Debug.Print(header.Key.PadRight(20) +  header.Value);
                dataGridView1.Columns.Add(header.Key, header.Key);
            }

            dgvRow = new object[dgvHeaders.Count];
            RecurseElements(xelement);
        }

        private void GetHeaders(XElement xelement)
        {
            foreach (var objx in xelement.Elements())
            {
                if (objx.HasElements)
                {
                    GetHeaders(objx);
                }
                else
                {
                    string header = objx.Name.ToString();

                    if (!dgvHeaders.ContainsKey(header))
                    {
                        // Add header only if it is not in the dictionary already.
                        dgvHeaders.Add(header, dgvHeaders.Count);
                    }
                }
            }
        }

        private void RecurseElements(XElement xelement)
        {
            foreach (var objx in xelement.Elements())
            {
                if (objx.HasElements)
                {
                    RecurseElements(objx);
                }
                else
                {
                    string name = objx.Name.ToString();
                    Debug.Print(name + " = " + objx.Value.ToString());

                    int columnPos = 0;
                    dgvHeaders.TryGetValue(name, out columnPos);

                    // Construct one row.
                    if (columnPos >= 0)
                    {
                        dgvRow[columnPos] = objx.Value;
                    }
                    else
                    {
                        Debug.Print(name + "   ************* NOT FOUND ***********");
                    }

                    if (name.Equals("chksum"))
                    {
                        // Add the row to the datagridview.
                        dataGridView1.Rows.Add(dgvRow);
                        dgvRow = new object[dgvHeaders.Count];
                        Debug.Print("--------------------------------");
                    }
                }
            }
        }
    }
}
 
Share this answer
 
v2
Comments
ankitpsaraogi 20-Feb-18 7:47am    
Awesomeeee!!!! Thanks a lot man!! But there is a tiny problem here. I tried your code and it's working like a charm.
But I need the output in a different format [https://drive.google.com/file/d/1piNwCZz7LZp7UjMJG8ocBLx3WgVHkkZE/view?usp=sharing] (Also edited in the question). It'll be a great help if you can help me out with it..
RickZeeland 20-Feb-18 8:05am    
That should not be too difficult, just add all the fields as properties in the HelperItem class. Then in RecurseElements() add logic to set the correct properties, when "chksum" is reached add the HelperItem, and create a new HelperItem.
ankitpsaraogi 21-Feb-18 0:10am    
I am really sorry but I am an amateur when it comes to coding. I have just started. Can you help me with the helper class? Plus, the fields are going to be of dynamic nature. It'll differ from xml to xml.
RickZeeland 21-Feb-18 8:05am    
Updated to dynamic version !
ankitpsaraogi 21-Feb-18 9:11am    
Thank you so much... Works like a charm!! Thank you so much for your efforts.. :)

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900