Vehicle gas DTD .NET objects and XML parsing with LINQ
The code contained below is a rough draft, and will eventually be moved into an assembly, and the code posted.
At some point in 2007 I started keeping track of my gas mileage in an XML file, with a custom DTD for validation (and intellisense in oXygen).
I present below the code necessary to create an rough object from the XML, and the LINQ to parse it out.
C# objects
public class Vehicle {
public int Id { get; set; }
public String Make { get; set; }
public String Model { get; set; }
public int Year { get; set; }
public IEnumerable Fillups { get; set; }
}
public class Fillup {
public int Id { get; set; }
public DateTime Date { get; set; }
public int MilesTotal { get; set; }
public Decimal MilesDriven { get; set; }
public Decimal Gallons { get; set; }
public Decimal CostPerGallon { get; set; }
public Decimal CostTotal { get; set; }
public String Notes { get; set; }
}</code></pre>
LINQ to XML
XDocument vehicleGasXml = XDocument.Load(@"C:\path\to\vehicle_gas.xml");
IEnumerable vehicles = from vehicle in vehicleGasXml.Descendants(“vehicle”)
select new Vehicle {
Id = int.Parse(vehicle.Attribute(“id”).Value),
Make = vehicle.Element(“make”).Value,
Model = vehicle.Element(“model”).Value,
Year = int.Parse(vehicle.Element(“year”).Value),
Fillups = from fillup in vehicle.Descendants(“fillup”)
select new Fillup {
Id = int.Parse(fillup.Attribute(“id”).Value),
Date = DateTime.ParseExact(fillup.Element(“date”).Value, “yyyy-MM-dd”, System.Globalization.CultureInfo.InvariantCulture),
MilesTotal = int.Parse(fillup.Element(“milesCar”).Value),
MilesDriven = decimal.Parse(fillup.Element(“milesDriven”).Value),
Gallons = decimal.Parse(fillup.Element(“gallons”).Value),
CostPerGallon = decimal.Parse(fillup.Element(“costGallon”).Value),
CostTotal = decimal.Parse(fillup.Element(“costTotal”).Value),
Notes = fillup.Element(“notes”).Value
}
};
As always, suggestions appreciated. (Although I've already got code that, using .NET 4, creates some rather nice charts with the information contained within a document such as this, and consider this close to complete; name information isn't grabbed, but I'm not sure that's altogether necessary ...)
Search
Links of Note
Support This Site
If my blog was helpful to you, then please consider visiting my Amazon Wishlist.