Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 一次读取和写入XML_C#_Xml_Linq - Fatal编程技术网

C# 一次读取和写入XML

C# 一次读取和写入XML,c#,xml,linq,C#,Xml,Linq,我正在阅读在线XML数据库的一部分(示例): 这很好,但现在我想用以下结构将这些变量写入本地XML文件: <releases> <release> <artist></artist> <albumTitle></albumTitle> <tracklist> <track> <posi

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

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

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

(请注意,必须有多个
轨迹
元素,每个元素都包含
位置
标题


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

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


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

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


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

假设在
版本中可以存在多个
版本

用法:

List<Release> releases = ......
string xmlString = releases.Save();
列表发布=。。。。。。
string xmlString=releases.Save();

List releases=xmlString.Load();

[XmlType(“发布”)]
公开课发行
{
[XmlElement(“艺术家”)]
公共字符串艺术家{get;set;}
[XmlElement(“albumTitle”)]
公共字符串标题{get;set;}
[XmlArray(“跟踪列表”)]
[XmlArrayItem(“轨道”)]
公共列表轨迹列表{get;set;}
}
[XmlType(“跟踪”)]
公共类轨道
{
[XmlElement(“位置”)]
公共字符串位置{get;set;}
[XmlElement(“标题”)]
公共字符串标题{get;set;}
}
公共静态类MyExtensions
{
公共静态列表加载(此字符串为xmlStr)
{
使用(StringReader=new StringReader(xmlStr))
{
XmlSerializer xs=新的XmlSerializer(typeof(List),新的XmlRootAttribute(“releases”);
返回(列表)xs.反序列化(读取器);
}
}
公共静态字符串保存(此列表)
{
XmlWriterSettings=new System.Xml.XmlWriterSettings();
settings.OmitXmlDeclaration=true;
settings.Indent=true;
settings.Encoding=Encoding.UTF8;
XmlSerializerNamespaces=新的XmlSerializerNamespaces();
添加(string.Empty,string.Empty);
使用(StringWriter=新StringWriter())
{
XmlWriter=XmlWriter.Create(writer,设置);
XmlSerializer xs=新的XmlSerializer(typeof(List),新的XmlRootAttribute(“releases”);
序列化(xmlWriter、列表、名称空间);
返回writer.ToString();
}
}
}

假设在
版本中可以存在多个
版本

用法:

List<Release> releases = ......
string xmlString = releases.Save();
列表发布=。。。。。。
string xmlString=releases.Save();

List releases=xmlString.Load();

[XmlType(“发布”)]
公开课发行
{
[XmlElement(“艺术家”)]
公共字符串艺术家{get;set;}
[XmlElement(“albumTitle”)]
公共字符串标题{get;set;}
[XmlArray(“跟踪列表”)]
[XmlArrayItem(“轨道”)]
公共列表轨迹列表{get;set;}
}
[XmlType(“跟踪”)]
公共类轨道
{
[XmlElement(“位置”)]
公共字符串位置{get;set;}
[XmlElement(“标题”)]
公共字符串标题{get;set;}
}
公共静态类MyExtensions
{
公共静态列表加载(此字符串为xmlStr)
{
使用(StringReader=new StringReader(xmlStr))
{
XmlSerializer xs=新的XmlSerializer(typeof(List),新的XmlRootAttribute(“releases”);
返回(列表)xs.反序列化(读取器);
}
}
公共静态字符串保存(此列表)
{
XmlWriterSettings=new System.Xml.XmlWriterSettings();
settings.OmitXmlDeclaration=true;
settings.Indent=true;
settings.Encoding=Encoding.UTF8;
XmlSerializerNamespaces=新的XmlSerializerNamespaces();
添加(string.Empty,string.Empty);
使用(StringWriter=新StringWriter())
{
XmlWriter=XmlWriter.Create(writer,设置);
XmlSerializer xs=新的XmlSerializer(typeof(List),新的XmlRootAttribute(“releases”);
序列化(xmlWriter、列表、名称空间);
返回writer.ToString();
}
}
}
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();
        }
    }
}