我有像这样的xml
<parent id="001">
<first>Brian</first>
<last>Johnson</last>
<gender>Male</gender>
</parent>
我的代码目前正在处理它:
public Dictionary<string, string> GetParentInfo(string id, XDocument xml)
{
var parent = xml.Descendants("parent")
.Where(p => p.Attribute("id").Value == id)
.FirstOrDefault();
var parentInfo = parent.Elements()
.ToDictionary(x => x.Name.LocalName, x => X.Value);
return parentInfo;
}
我的问题是我的xml现在改为:
<parent id="001">
<first>Brian</first>
<last>Johnson</last>
<gender>Male</gender>
<child>Jimmy</child>
<child>Janet</child>
<child>Carl</child>
</parent>
字典不再合适,我想不出如何处理这种变化。
答案 0 :(得分:1)
我会像这样创建你的Parent类:
private class Parent
{
public string Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Gender { get; set; }
public IEnumerable<string> Children { get; set; }
}
并有一个解析xml的工厂方法:
private static Parent ParentInfo(string id, XDocument xml)
{
return xml.Descendants("parent")
.Where(p => (string)p.Attribute("id") == id)
.Select(x => new Parent {
FirstName = (string)x.Element("first"),
LastName = (string)x.Element("last"),
Gender = (string)x.Element("gender"),
Children = x.Elements("child").Select(y => (string)y)
})
.FirstOrDefault();
}
要解析烦人的xml架构。
编辑:使用强制转换而不是对.Value的调用,因此它对空值更具弹性。
答案 1 :(得分:0)
如何为Parent编写一个类,然后为它创建一个构造函数,它接受一个XElement并将其解析为类的属性。您仍然可以保留字典,但它将是Dictionary<string, Parent>
public class Parent
{
public string ID {get;set;}
public string First {get;set;}
public string Last {get;set;}
public string Gender {get;set;}
public List<string> ChildrensNames {get;set;}
public Parent(XElement parentXML) { // parse XML and fill properties
}
}