我有这样的XElement:
<adress name="company1" street="street1" City="city1" <branch key="1" value="branch1" /><language key="1" value="langauge1" /> </adress>
当你看到有在元素ADRESS几个属性和它继承的元素分支,其中还包含一些属性的语言。
我想这样的一个表:
name street city branchvalue branchkey languagevalue languagekey
我怎样才能做到这一点? 我可以硬编码,因为XML方案是每次相同,但,我想有一个充满活力和苗条的解决方案
下面是做到这一点的一种方式的例子。 你真的应该做的空检查,而不是承担所有的属性都存在与价值,但如果你能相信它,在这里你去:
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
};
更新
在新的证据光......我还是不知道这是否适合您的需要,但你可以动态地创建一个字典。 从那里,你可以做你想做的数据什么:
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);
}
}