3

我正在使用 XDocument 读取 XML 文件并将其加载到类中。每个“站点”节点应该是一个类,其中“标签”节点是一个列表。我无法将“标签”元素作为列表加载到类中。

以下是课程:

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>

谢谢。

4

2 回答 2

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 的 Wikipedia 文章(不能发布两个以上的超链接)。

于 2012-10-05T20:12:33.757 回答
1

试试这个,在您的评论位置 // 如何加载...:(未经测试)

tags = x.Element("tags").Elements("tag").Select(r => new Tag() { Column=r.Attribute("column"), Value = r.Value } );
于 2012-10-05T18:30:46.537 回答