I am trying to learn about LINQ and XML files for data storage, while I teach myself C# and VS2010. I want to read an XML file with a list of server info for some SQL servers that I have in my virtual lab that I use for testing.
My XML file looks like this:
<?xml version="1.0" encoding="utf-8" ?>
<ServerList>
<Server>
<Name>SQLSVR1</Name>
<Type>Windows Server 2008 R2</Type>
<Product>Microsoft SQL Server 2008</Product>
<Database>AspNetDB</Database>
<UID>Admin</UID>
<PWD>!Passw0rd</PWD>
</Server>
<Server>
<Name>SQLSVR2</Name>
<Type>Windows Server 2008 R2</Type>
<Product>Microsoft SQL Server 2008</Product>
<Database>AspNetDB</Database>
<UID>Admin</UID>
<PWD>!Passw0rd</PWD>
</Server>
</ServerList>
I have a Windows form, which has a ComboBox ("cbSQLServers"). I'd like to populate that ComboBox in the Form_Load() event with the results from the XML file.
private void Form1_Load(object sender, EventArgs e)
{
string filePath = @"..\\..\\ServerList.xml";
if (File.Exists(filePath))
{
XDocument xDoc = XDocument.Load(filePath);
var data = from item in xDoc.Descendants("server")
select new
{
serverName = item.Element("Name").Value,
serverType = item.Element("Type").Value,
serverProduct = item.Element("Product").Value
};
foreach (var p in data)
cbSQLServers.Items.Add(p.ToString());
// I used the Console to test if it was doing anything.
// Console.WriteLine(p.ToString());
}
else
{
MessageBox.Show("The file " + filePath + " does not exist.");
}
}
My final goal with this, is that when I run the program and select an item from the ComboBox, it will display the information for that server in a ListBox on the form called LbLog:
private void cbSQLServers_SelectedIndexChanged(object sender, EventArgs e)
{
/*
* Pseudo-code...not sure how to pass from Form1_Load() to _SelectedIndexChanged.
lbLog.Items.Add("Server Name: " + cbSQLServers.SelectedIndex);
lbLog.Items.Add("\t Type: " + cbSQLServers.SelectedIndex);
lbLog.Items.Add("\t Product: " + cbSQLServers.SelectedIndex);
lbLog.Items.Add("\t Database: " + cbSQLServers.SelectedIndex);
lbLog.Items.Add("\t UID: " + cbSQLServers.SelectedIndex);
lbLog.Items.Add("\t PWD: " + cbSQLServers.SelectedIndex);
*/
}
Could anyone help me with determining how to read the data from the XML file with LINQ?
@"..\\..\\ServerList.xml"is wrong; use either@"..\..\ServerList.xml"or"..\\..\\ServerList.xml", not both.xDoc,data,item,Typeand so on; these do not mean anything. C# is a strongly-typed language, it will tell you what each data type is, you do not need to mangle the names. Identifiers should explain their meaning.