一次读写XML

时间:2012-01-28 17:17:50

标签: c# xml linq

我正在阅读在线XML数据库的一部分(例如here):

var release     = XElement.Parse(text).Element("release");
var artist      = release.Element("artists").Element("artist").Element("name").Value;
var albumTitle  = release.Element("title").Value;
var positions   = release.Element("tracklist").Descendants("position").Select(x => x.Value).ToList();
var titles      = release.Element("tracklist").Descendants("title").Select(x => x.Value).ToList();

这很有效,但现在我想将这些变量写入本地XML文件,具有以下结构:

<releases>
    <release>
        <artist></artist>
        <albumTitle></albumTitle>
        <tracklist>
            <track>
                <position></position>
                <title></title>
            </track>
        </tracklist>
    </release>
</releases>

(请注意,必须有多个track元素,每个元素都包含positiontitle。)

我想知道如何同时完成这两个步骤(读取和写入XML)。

2 个答案:

答案 0 :(得分:1)

假设release中可以存在多个releases

用法:

List<Release> releases = ......
string xmlString = releases.Save();

List<Release> releases = xmlString.Load();

[XmlType("release")]
public class Release
{
    [XmlElement("artist")]
    public string Artist { get; set; }

    [XmlElement("albumTitle")]
    public string AlbumTitle { get; set; }

    [XmlArray("tracklist")]
    [XmlArrayItem("track")]
    public List<Track> TrackList { get; set; }
}

[XmlType("track")]
public class Track
{
    [XmlElement("position")]
    public string Position { get; set; }

    [XmlElement("title")]
    public string Title { get; set; }
}

public static class MyExtensions
{
    public static List<Release> Load(this string xmlStr)
    {
        using (StringReader reader = new StringReader(xmlStr))
        {
            XmlSerializer xs = new XmlSerializer(typeof(List<Release>), new XmlRootAttribute("releases"));
            return (List<Release>)xs.Deserialize(reader);
        }
    }

    public static string Save(this List<Release> list)
    {
        XmlWriterSettings settings = new System.Xml.XmlWriterSettings();
        settings.OmitXmlDeclaration = true;
        settings.Indent = true;
        settings.Encoding = Encoding.UTF8;

        XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
        namespaces.Add(string.Empty, string.Empty);

        using (StringWriter writer = new StringWriter())
        {
            XmlWriter xmlWriter = XmlWriter.Create(writer, settings);

            XmlSerializer xs = new XmlSerializer(typeof(List<Release>), new XmlRootAttribute("releases"));

            xs.Serialize(xmlWriter, list, namespaces);
            return writer.ToString();
        }
    }
}

答案 1 :(得分:0)

如果我理解正确,您正在寻找如何将XML写入文件。这应该指向正确的方向:

http://msdn.microsoft.com/en-us/library/dw229a22.aspx

XDocument API允许添加/修改/删除XElements,并且还允许将文档写入磁盘。