Solved

C# XML File to Datatable

Posted on 2013-05-20
15
382 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:sedgwick
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:sedgwick
ID: 39181395
i don't understand.
what do u mean u pass formname as titleform?
0
Courses: Start Training Online With Pros, Today

Brush up on the basics or master the advanced techniques required to earn essential industry certifications, with Courses. Enroll in a course and start learning today. Training topics range from Android App Dev to the Xen Virtualization Platform.

 

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:sedgwick
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:sedgwick
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:sedgwick
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:sedgwick
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:
sedgwick earned 500 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:sedgwick
ID: 39182312
according to the xml u posted u have 2 inner elements, one for titleform and one for memberform.
0

Featured Post

Gigs: Get Your Project Delivered by an Expert

Select from freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely and get projects done right.

Question has a verified solution.

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

This article describes a simple method to resize a control at runtime.  It includes ready-to-use source code and a complete sample demonstration application.  We'll also talk about C# Extension Methods. Introduction In one of my applications…
Summary: Persistence is the capability of an application to store the state of objects and recover it when necessary. This article compares the two common types of serialization in aspects of data access, readability, and runtime cost. A ready-to…
This tutorial gives a high-level tour of the interface of Marketo (a marketing automation tool to help businesses track and engage prospective customers and drive them to purchase). You will see the main areas including Marketing Activities, Design …
This Micro Tutorial demonstrates using Microsoft Excel pivot tables, how to reverse engineer competitors' marketing strategies through backlinks.

776 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