2012-01-28 10 views
1

私はオンラインのXMLデータベースの部分を読んでいる(例here)を書く:読むとXML一度

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> 

(それぞれpositiontitleを含む、複数track要素が存在しなければならないことに注意してください。)

私は両方のステップ(XMLからの読み込みとXMLへの書き込み)を同時に行うことができますか?

答えて

0

私が正しく理解している場合は、XMLをファイルに書き込む方法を探しています。

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

XDocumentのAPIがXElementsが/変更/削除を追加することができ、そしてそれはまた、文書をディスクに書き込むことを可能にする:これは正しい方向にあなたを指している必要があります。複数release sはreleasesで存在することができると仮定して

1

使用:

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(); 
     } 
    } 
}