我正在阅读在线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
元素,每个元素都包含position
和title
。)
我想知道如何同时完成这两个步骤(读取和写入XML)。
答案 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,并且还允许将文档写入磁盘。