C# XML File to Datatable

Hi, I have an XML file like this.

<?xml version="1.0" encoding="utf-8" ?>
<rootelement>
  <titleform>
    <formname>title</formname>
    <controlname>tbxdescription</controlname>
    <visible>true</visible>
    <requiredfiled>true</requiredfiled>
  </titleform>
  <Memberform>
    <formname>member</formname>
    <controlname>tbxmemberid</controlname>
    <visible>false</visible>
    <requiredfiled>false</requiredfiled>
  </Memberform>
</rootelement>


now in C# I need output as follows. I Should be able to pass the form name through code and desired output should result in datatable. Example: If I pass formname as title, member should not appear in datatable. How do I do this ?

FormName      ControlName      RequiredField      Visible
title                     tbxtitle               true                      true
Member             tbxmemberid       false              false
GRChandrashekarAsked:
Who is Participating?
 
Meir RivkinConnect With a Mentor Full stack Software EngineerCommented:
DataTable GetFormData(string formtype){
DataTable dt = new DataTable();
            var root = XElement.Load(@"c:\temp\1.xml");
            dt.Columns.AddRange(root.Elements().FirstOrDefault().Elements().Select(n => new DataColumn { ColumnName = n.Name.LocalName }).ToArray());
            var rows = root.Elements().Select(n => n.Elements().Select(y => y.Value).ToArray()).ToList();

if(formtype == "title"){
                dt.Rows.Add(rows[0]);
}else if(formtype == "member"){
                dt.Rows.Add(rows[1]);
}
return dt;
}

Open in new window

0
 
Meir RivkinFull stack Software EngineerCommented:
 using System.Data;
using System.Linq;
using System.Xml.Linq;

 class Program
    {
        static void Main(string[] args)
        {
DataTable dt = new DataTable();
            var root = XElement.Load(@"c:\temp\1.xml");
            dt.Columns.AddRange(root.Elements().FirstOrDefault().Elements().Select(n => new DataColumn { ColumnName = n.Name.LocalName }).ToArray());
            var rows = root.Elements().Select(n => n.Elements().Select(y => y.Value).ToArray());

            foreach (var row in rows)
            {
                dt.Rows.Add(row);
            }
}
}

Open in new window

0
 
GRChandrashekarAuthor Commented:
This is not answered

Example: If I pass formname as title, member should not appear in datatable. How do I do this ?
0
Cloud Class® Course: MCSA MCSE Windows Server 2012

This course teaches how to install and configure Windows Server 2012 R2.  It is the first step on your path to becoming a Microsoft Certified Solutions Expert (MCSE).

 
Meir RivkinFull stack Software EngineerCommented:
i don't understand.
what do u mean u pass formname as titleform?
0
 
GRChandrashekarAuthor Commented:
Refer this.

<titleform>
    <formname>title</formname>
    <controlname>tbxdescription</controlname>
    <visible>true</visible>
    <requiredfiled>true</requiredfiled>
  </titleform>

I should be able to pass title as input. Then output should be

FormName      ControlName      RequiredField      Visible
title                     tbxtitle               true                      true
0
 
Meir RivkinFull stack Software EngineerCommented:
so if the value of formname element is "title" then it shouldn't be included in the datatable?
0
 
GRChandrashekarAuthor Commented:
If the value for formname element is "title" then "member" should not be included in datatable
If the value for formname element is "member" then "title" should not be included in datatable
0
 
Meir RivkinFull stack Software EngineerCommented:
sorry u gotta be more clear.
there are 2 elements in your xml: titleform and Memberform.
now please describe the use cases.
which element is not suppose to be insert to the datatable? and when?
0
 
GRChandrashekarAuthor Commented:
from C# if i pass value as titleform, then output should be

FormName      ControlName      RequiredField      Visible
title                     tbxtitle               true                    true


from C# if i pass value as memberform, then output should be

FormName      ControlName      RequiredField      Visible
Member             tbxmemberid     false                 false
0
 
Meir RivkinFull stack Software EngineerCommented:
>>from C# if i pass value as titleform
what is that mean?
pass where?
0
 
GRChandrashekarAuthor Commented:
should be something like

var root = XElement.Load(@"c:\temp\1.xml\title");

I mean pass to XML
0
 
Meir RivkinFull stack Software EngineerCommented:
U cant pass variable to xml like this.
U can have a function which accept either title or member, and the function will populate datatable accordingly.
What i failed to understand is what should the results.
0
 
GRChandrashekarAuthor Commented:
Result is here

from C# if i pass value as titleform, then output should be

FormName      ControlName      RequiredField      Visible
title                     tbxtitle               true                    true


from C# if i pass value as memberform, then output should be

FormName      ControlName      RequiredField      Visible
Member             tbxmemberid     false                 false
0
 
GRChandrashekarAuthor Commented:
These lines (rows[1]); (rows[0]);in resharper says Co-variant conversion from string to object  can cause run time exception on write operation
0
 
Meir RivkinFull stack Software EngineerCommented:
according to the xml u posted u have 2 inner elements, one for titleform and one for memberform.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.