EN VI

Pass a set of xml values to an object using Linq in c#?

2024-03-11 05:30:08
How to Pass a set of xml values to an object using Linq in c#

Created a class to help pass values from an xml:

class ApptDetails
{
    // public string date { get; set; }
    public string starttime { get; set; }
    public string endtime { get; set; }
    public string details { get; set; }
    public string notes { get; set; }
}

Using this XML format:

<March>
    <date>
    03/09/2024
    <starttime>8:00 AM</starttime>
        <endtime>8:30 AM</endtime>
        <details>blah1</details>
        <notes>blarty1</notes>
    </date>
    <date>
    03/09/2024
    <starttime>9:00 AM</starttime>
        <endtime>9:30 AM</endtime>
        <details>blah2</details>
        <notes>blarty2</notes>
    </date>
    <date>
    03/09/2024
    <starttime>10:00 AM</starttime>
        <endtime>10:30 AM</endtime>
        <details>it finally freakin works!!!!</details>
        <notes>Can i get an AMEN?</notes>
    </date>
</March>

I couldn't even begin to describe all the things I have tried here. I have been researching this for over a week now, and have tried over a dozen different approaches. This is where I am at now, and is a bit of a culmination of what I have learned so far. Right now I am just sending the class variables to a messagebox for testing. The issue is the values are not passing to the object.

if (File.Exists(@"C:\FSAppointmentsTest\Appointments\" + now.ToString("MMMM") + ".xml"))
{
    ApptDetails apptDetails = new ApptDetails();

    XDocument appointments = XDocument.Load(@"C:\FSAppointmentsTest\Appointments\" +       now.ToString("MMMM") + ".xml");

    foreach (var child in appointments.Descendants("starttime"))
    {
        // XDocument appointmentData = XDocument.Parse("date");
        IEnumerable<ApptDetails> result = from date in appointments.Descendants("starttime")
                                          select new ApptDetails()
                                              {
                                                  starttime =       (string)date.Attribute("starttime").Value.ToString(),
                                                  endtime =     (string)date.Attribute("endtime").Value.ToString(),
                                                  details = (string)date.Attribute("details").Value.ToString(),
                                                  notes = (string)date.Attribute("notes").Value.ToString(),
                                              };

        System.Windows.Forms.MessageBox.Show(apptDetails.starttime);
        System.Windows.Forms.MessageBox.Show(apptDetails.endtime);
        System.Windows.Forms.MessageBox.Show(apptDetails.details);
        System.Windows.Forms.MessageBox.Show(apptDetails.notes);
    }
}

Apologies if I missed anything. I have been reading from here for a long time but it is my first actual plea for help.

Solution:

Try following

using System;
using System.Linq;
using System.Collections.Generic;
using System.Data;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApp10
{
    class Program
    {
        static string FILENAME = @"c:\temp\test.xml";
         static void Main(string[] args)
        {

            XDocument doc = XDocument.Load(FILENAME);
            List<ApptDetails> details = doc.Descendants("date").Select(x => new ApptDetails(x)).ToList();
  

        }
        class ApptDetails
        {
            public DateTime date { get; set; }
            public DateTime starttime { get; set; }
            public DateTime endtime { get; set; }
            public string details { get; set; }
            public string notes { get; set; }

            public ApptDetails(XElement element)
            { 
                date = DateTime.Parse(element.FirstNode.ToString());
                starttime = (DateTime)element.Element("starttime");
                endtime = (DateTime)element.Element("starttime");
                details = (string)element.Element("details");
                notes = (string)element.Element("notes");

            }
        }
    }

}
Answer

Login


Forgot Your Password?

Create Account


Lost your password? Please enter your email address. You will receive a link to create a new password.

Reset Password

Back to login