Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
?
Solved

C# XML File to Datatable

Posted on 2013-05-20
15
Medium Priority
?
417 Views
Last Modified: 2013-05-20
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
0
Comment
Question by:GRChandrashekar
  • 8
  • 7
15 Comments
 
LVL 42

Expert Comment

by:Meir Rivkin
ID: 39181368
 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
 

Author Comment

by:GRChandrashekar
ID: 39181389
This is not answered

Example: If I pass formname as title, member should not appear in datatable. How do I do this ?
0
 
LVL 42

Expert Comment

by:Meir Rivkin
ID: 39181395
i don't understand.
what do u mean u pass formname as titleform?
0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 

Author Comment

by:GRChandrashekar
ID: 39181403
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
 
LVL 42

Expert Comment

by:Meir Rivkin
ID: 39181426
so if the value of formname element is "title" then it shouldn't be included in the datatable?
0
 

Author Comment

by:GRChandrashekar
ID: 39181452
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
 
LVL 42

Expert Comment

by:Meir Rivkin
ID: 39181519
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
 

Author Comment

by:GRChandrashekar
ID: 39181529
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
 
LVL 42

Expert Comment

by:Meir Rivkin
ID: 39181545
>>from C# if i pass value as titleform
what is that mean?
pass where?
0
 

Author Comment

by:GRChandrashekar
ID: 39181600
should be something like

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

I mean pass to XML
0
 
LVL 42

Expert Comment

by:Meir Rivkin
ID: 39181666
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
 

Author Comment

by:GRChandrashekar
ID: 39181669
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
 
LVL 42

Accepted Solution

by:
Meir Rivkin earned 2000 total points
ID: 39182188
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
 

Author Comment

by:GRChandrashekar
ID: 39182294
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
 
LVL 42

Expert Comment

by:Meir Rivkin
ID: 39182312
according to the xml u posted u have 2 inner elements, one for titleform and one for memberform.
0

Featured Post

Receive 1:1 tech help

Solve your biggest tech problems alongside global tech experts with 1:1 help.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Article by: Najam
Having new technologies does not mean they will completely replace old components.  Recently I had to create WCF that will be called by VB6 component.  Here I will describe what steps one should follow while doing so, please feel free to post any qu…
Introduction Although it is an old technology, serial ports are still being used by many hardware manufacturers. If you develop applications in C#, Microsoft .NET framework has SerialPort class to communicate with the serial ports.  I needed to…
Loops Section Overview
As many of you are aware about Scanpst.exe utility which is owned by Microsoft itself to repair inaccessible or damaged PST files, but the question is do you really think Scanpst.exe is capable to repair all sorts of PST related corruption issues?
Suggested Courses

580 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question