我正在使用XDocument读取XML文件并将其加载到类中。每个“站点”节点应该是一个类,其中“tags”节点是其中的List。我无法将“tags”元素作为List加载到类中。
以下是课程:
public class Site
{
public string name;
public string prefix;
public List<Tag> tags;
}
public class Tag
{
public string Name { get; set; }
public string Column { get; set; }
}
这是将XML数据加载到类中的代码:
settings = XDocument.Load("settings.xml");
IEnumerable<Site> sites = settings.Descendants("site").Select(x => new Site()
{
name = x.Element("name").Value,
prefix = x.Element("prefix").Value,
// How to load the "tag" elements into a List<Class>?
});
使用以下XML示例:
<settings>
<site>
<name>name1</name>
<prefix>prefix1</prefix>
<tags>
<tag column="col1">tag1</tag>
<tag column="col2">tag2</tag>
<tag column="col3">tag3</tag>
</tags>
</site>
<site>
<name>name2</name>
<prefix>prefix2</prefix>
<tags>
<tag column="col1">tag1</tag>
<tag column="col2">tag2</tag>
<tag column="col3">tag3</tag>
</tags>
</site>
</settings>
感谢。
答案 0 :(得分:4)
这有效:
using System.IO;
using System.Xml.Serialization;
namespace Playground
{
public class Program
{
[XmlRoot("settings")]
public class Settings
{
[XmlElement("site")]
public Site[] Sites;
}
public class Site
{
[XmlElement("name")]
public string Name;
[XmlElement("prefix")]
public string Prefix;
[XmlArrayItem("tag", typeof(Tag))]
[XmlArray("tags")]
public Tag[] Tags;
}
public class Tag
{
[XmlAttribute("column")]
public string Column;
[XmlText]
public string Name;
}
public static void Main(string[] args)
{
using (FileStream reader = new FileStream("mydoc.xml", FileMode.Open))
{
XmlSerializer ser = new XmlSerializer(typeof (Settings));
Settings o = ser.Deserialize(reader) as Settings;
}
}
}
}
进一步阅读:
http://msdn.microsoft.com/en-us/library/system.xml.serialization.aspx(最重要的是XmlSerializer类)
http://msdn.microsoft.com/en-us/library/x6c1kb0s(v=vs.71).aspx
关于XSD的维基百科文章(不能发布超过两个超链接)。
答案 1 :(得分:1)
在评论的位置试试//如何加载...... :(未经测试)
tags = x.Element("tags").Elements("tag").Select(r => new Tag() { Column=r.Attribute("column"), Value = r.Value } );