我有这个xelement:
<adress name="company1" street="street1" City="city1" <branch key="1" value="branch1" /><language key="1" value="langauge1" /> </adress>
如你所见,元素地址中有几个属性,它继承了包含一些属性的元素分支和语言。
我想要一张这样的桌子:
name street city branchvalue branchkey languagevalue languagekey
我该怎么做?我可以对它进行硬编码,因为xml方案每次都是相同的,但我希望有一个动态而纤薄的解决方案
答案 0 :(得分:0)
以下是一种实现方法的示例。你真的应该做空检查而不是假设所有属性都带有值,但是如果你可以相信它,那么你可以去:
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);
}
}