Solved

C# XML File to Datatable

Posted on 2013-05-20
15
379 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
 

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
How to improve team productivity

Quip adds documents, spreadsheets, and tasklists to your Slack experience
- Elevate ideas to Quip docs
- Share Quip docs in Slack
- Get notified of changes to your docs
- Available on iOS/Android/Desktop/Web
- Online/Offline

 

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

Enabling OSINT in Activity Based Intelligence

Activity based intelligence (ABI) requires access to all available sources of data. Recorded Future allows analysts to observe structured data on the open, deep, and dark web.

Join & Write a Comment

This article introduced a TextBox that supports transparent background.   Introduction TextBox is the most widely used control component in GUI design. Most GUI controls do not support transparent background and more or less do not have the…
Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at http://bit.ly/XDcourse.

757 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

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now