tisdag 26 april 2011

DeSerialize XML file with namespaces

Given the following XML file, I wanted to iterate over all of the records and summarize the values of all elements named HANDLED.
Each LANGUAGE has 12 records so I wanted a summary for each language and then spit it out into a .csv file.




TELEPHONE__2011-01-26.XML
345

1
SWE
12
1
4533
2400
6292
204
2196




I got nice exceptions occurring because of the namespace prefix when I first tried the following code:


var stats = from stat in xd.Descendants("CRP:PHONE_STATISTICS")
where stat.Element("LANGUAGE").Value == language
select new
{
Handled = int.Parse(stat.Element("HANDLED").Value),
Abandoned = int.Parse(stat.Element("ABANDONED").Value),
Language = stat.Element("LANGUAGE").Value
};


So I then found out that I could prefix the element names with the actual namespace provided in the root element of the document, like this:


XNamespace ns = "http://somedomain/CR/PHONE";

var stats = from stat in xd.Descendants(ns + "PHONE_STATISTICS")


The end result looks like this:


namespace XMLSummarizer
{
class Program
{
static void Main(string[] args)
{
XNamespace ns = "http://somedomain/CR/PHONE";

string txtLogFileName = @"data.csv";
string XMLfolder = Directory.GetCurrentDirectory();

TextWriter tw = new StreamWriter(txtLogFileName);

tw.WriteLine("Date;Month;Handled;Abandoned;Language");

foreach (var file in System.IO.Directory.EnumerateFiles(XMLfolder,"*.xml"))
{
DateTime statsDate = DateTime.Parse(file.Substring(file.IndexOf("_PHONE") + 7, 10));
Console.WriteLine(statsDate.ToShortDateString());

XDocument xd = XDocument.Load(file);

string[] languages = new string[] { "SWE", "DAN", "NOR", "FIN" };

foreach (string language in languages)
{
SummarizeDataPerDay(ns, tw, xd, language, statsDate);
}
}

tw.Flush();
tw.Close();

Console.WriteLine("Operation completed successfully. Press [Enter] to close application.");
Console.ReadLine();
}

private static void SummarizeDataPerDay(XNamespace ns, TextWriter tw, XDocument xd, string language, DateTime dataDate)
{
var stats = from stat in xd.Descendants(ns + "PHONE_STATISTICS")
where stat.Element("LANGUAGE").Value == language
select new
{
Handled = int.Parse(stat.Element("HANDLED").Value),
Abandoned = int.Parse(stat.Element("ABANDONED").Value),
Language = stat.Element("LANGUAGE").Value
};

string lang = "";
int handledCalls = 0;
int abandonedCalls = 0;

foreach (var stat in stats)
{
handledCalls += stat.Handled;
abandonedCalls += stat.Abandoned;
lang = stat.Language;
}

tw.WriteLine(dataDate + ";" + dataDate.Month + ";" + handledCalls + ";" + abandonedCalls + ";" + lang);
}
}
}

måndag 21 mars 2011

Delete from MySQL with PHP


$logID = $_GET['id'];

open_db('mydb');

$query = "DELETE FROM conversionlog WHERE logID = '$logID'";
$result = mysql_query($query)
or die("Query failed: ".mysql_error());

close_db();

header("Location: page.php?action=viewcases&hl='$logID'");

måndag 17 januari 2011

Post numero uno

So the first order of business will be a move of this blog to our own which is under development, thanks to inspiration from Scott Hanselman over at hanselman.com and his colleagues.

I'm still honing my skills in C# and ASP.NET so bear with me. As a father of a 5 months old little girl it's hard to take time to dive into VS2010 and the bookshelf. :)

My level of coding the past 5 years have been sporadic and I've always feared for the day I'd have to move from the safe havens of ASP 2.0 and VBScript. Of course I always knew I would have to take the plunge but thanks to the Windows Phone 7 platform and the vast amount of tools and documentation that is available, together with a really strong breeze of fresh air from Microsoft I took the leap.

To my great surprise the Netduino, an open source hardware platform based on the .NET Micro framework saw the light in the second half of 2010.

So now my programming and electronics interests get their share of love and I have a few home automation project ccoking, but more on that later.

As I began searching for the ASP.NET File->New project equivalent of classic ASP I found out about a lot of cool people that are involved in the ASP.NET community and one of those people are Scott Hanselman, a great speaker and inspiration. And I must say I've (for now) found a favorite in the project templates, MVC 3 with the Razor view engine. Really neat stuff. Read more about it on Scott Guthrie's blog: weblogs.asp.net/scottgu/

I'd also like to thank Rob Miles of www.robmiles.com for his C# Yellow Book and brittish wit.

Last but not least, learnvisualstudio.com has tons of videos related to Visual Studio development, ranging from ASP.NET 2.0 up to the brand new features like Entity Framework 4 and MVC hands-on's. Give them a try, it's worth every penny.

P.S.
This could actually be the longest blog post I've ever written... :)