Here's an example of one way to do it. You really should do null checking and not assume all attributes are present with values, but if you can trust it, here you go:
string strElem = "<adress name=\"company1\" street=\"street1\" City=\"city1\"><branch key=\"1\" value=\"branch1\" /><language key=\"1\" value=\"langauge1\" /> </adress>";
XElement xel = XElement.Parse(strElem);
var branch = xel.Element("branch");
var lang = xel.Element("language");
var theTable = new {
name = xel.Attribute("name").Value,
street = xel.Attribute("street").Value,
city = xel.Attribute("City").Value,
branchkey = branch.Attribute("key").Value,
branchvalue = branch.Attribute("value").Value,
languagevalue = lang.Attribute("key").Value,
languagekey = lang.Attribute("value").Value
};
Update
In light of new evidence...
I'm still not sure if this suits your needs, but you can dynamically create a Dictionary. From there you can do whatever you want with the data:
string strElem = "<adress name=\"company1\" street=\"street1\" City=\"city1\"><branch key=\"1\" value=\"branch1\" /><language key=\"1\" value=\"langauge1\" /> </adress>";
XElement xel = XElement.Parse(strElem);
var theTable = new ExpandoObject() as IDictionary<string, Object>;
foreach (XAttribute attr in xel.Attributes())
{
theTable.Add(attr.Name.LocalName, attr.Value);
}
foreach (XElement el in xel.Elements())
{
foreach (XAttribute attr in el.Attributes())
{
theTable.Add(el.Name + attr.Name.LocalName, attr.Value);
}
}
