我有一个看起来像这样的xml文件
<Root>
<Element1>17890</Element>
<Element2>0001</Element2>
<Element3>123451324A</Element3>
<Element4>1</Element4>
<Element5>ABC</Element5>
<Element6>DEF</Element6>
<Element7>99.10</Element7>
<Element8>GHI</Element8>
<Element9>2014-01-25</Element9>
<Element10>JKL</Element10>
<Element11>737268</Element11>
</Root>
我有一个对应的类,它将所有元素名称作为属性。我们假设我收集了所有元素,例如
IEnumerable<XElement> elements;
如何将类的属性值设置为xml文件中的元素值?
我唯一想到的是循环元素并使用
等部分创建一个大的switch语句...
case "Element3":
model.Element3 = element.Value;
break;
...
有更好的解决方案吗?
答案 0 :(得分:0)
假设您已经有一个类Model,其中包含您希望从xml中获取的字段:
var elements = XDocument.Load("XMLFile1.xml").Root.Elements();
var model = new Model()
{
Element1 = elements.FirstOrDefault(t => t.Name.LocalName == "Element1"),
Element2 = elements.FirstOrDefault(t => t.Name.LocalName == "Element2"),
};
另一种选择是创建字典,因此每次将新标记名称添加到xml文件时,您都不需要更新模型。
var model = new Dictionary<string, string>();
foreach(XElement tag in elements)
{
model[tag.Name.LocalName] = tag.Value;
}
或使用Linq
var model = elements.ToDictionary(e => e.Name.LocalName, e => e.Value);
最后,您可以直接从xml生成动态对象。这里有一个例子:Deserialize XML To Object using Dynamic