C# 将列表追加到XML

C# 将列表追加到XML,c#,xml,linq,C#,Xml,Linq,我试图将我的列表附加到XML文件中 我有我的c#class密码设置,其中包含一些属性: public class PasswordSettings { public string customerRef { get; set; } public string node { get; set; } public string name { get; set; } public string login { get; set; } public string

我试图将我的列表附加到XML文件中

我有我的c#class
密码设置
,其中包含一些属性:

public class PasswordSettings {
    public string customerRef { get; set; }
    public string node { get; set; }
    public string name { get; set; }
    public string login { get; set; }
    public string password { get; set; }
    public string fileType { get; set; }
}
我有一个密码设置列表,如下所示:

public List<PasswordSettings> Logins = new List<PasswordSettings>();
现在我想把这个列表添加到一个XML文件中,这样我就可以得到如下结果:

<PasswordSettings>
    <Logins>
        <customerRef>abc</customerRef>
        <name>test</name>
    </Logins>
</PasswordSettings>

abc
测试
如果我想添加另一个登录名,它将附加到XML文件中,即不替换或覆盖任何内容,因此会添加一个新的


我尝试了多种方法,要么得到空指针,要么什么都没写。我想空指针可能是因为XML文件为空,但我只希望它将此列表添加为XML结构。

这里有一个创建XML或添加新记录的解决方案,因此,在您调整以下内容后,您可以:

        PasswordSettings settings = new PasswordSettings();
        settings.customerRef = "abc";
        settings.name = "test";
        Logins.Add(settings);
        settings = new PasswordSettings();
        settings.customerRef = "def";
        settings.name = "test1";
        Logins.Add(settings);

        foreach (var login in Logins)
        {
            if (!File.Exists(@"e:\Test.xml"))
            {
                XDocument doc =
                    new XDocument(
                        new XElement("PasswordSettings",
                            new XElement("Logins",
                                new XElement("customerRef", login.customerRef),
                                new XElement("name", login.name)
                            )
                        )
                    );

                doc.Save(@"e:\Test.xml");
            }
            else
            {
                XDocument doc = XDocument.Load(@"e:\Test.xml");
                XElement root = doc.Element("PasswordSettings");
                IEnumerable<XElement> rows = root.Descendants("Logins");
                XElement firstRow = rows.First();
                firstRow.AddBeforeSelf(
                    new XElement("Logins",
                        new XElement("customerRef", login.customerRef),
                        new XElement("name", login.name)));
                doc.Save(@"e:\Test.xml");
            }
        }

        }
输出:

<?xml version="1.0" encoding="utf-8"?>
<PasswordSettings>
  <Logins>
    <customerRef>abc</customerRef>
    <name>test</name>
  </Logins>
  <Logins>
    <customerRef>def</customerRef>
    <name>test1</name>
  </Logins>
</PasswordSettings>

abc
测试
def
测试1

在最终的xml中,根是PasswordSettings,您有很多Logins元素?是的,就是这样,您知道在添加新元素之前必须加载文件吗?如果文件太大,那就不好了。你能发布一个你开始使用的XML文件的模板吗?因为它是空的,所以里面什么都没有。称为Passwords.xml
<?xml version="1.0" encoding="utf-8"?>
<PasswordSettings>
  <Logins>
    <customerRef>def</customerRef>
    <name>test1</name>
  </Logins>
  <Logins>
    <customerRef>abc</customerRef>
    <name>test</name>
  </Logins>
</PasswordSettings>
                XElement firstRow = rows.Last();
                firstRow.AddAfterSelf(
                    new XElement("Logins",
                        new XElement("customerRef", login.customerRef),
                        new XElement("name", login.name)));
<?xml version="1.0" encoding="utf-8"?>
<PasswordSettings>
  <Logins>
    <customerRef>abc</customerRef>
    <name>test</name>
  </Logins>
  <Logins>
    <customerRef>def</customerRef>
    <name>test1</name>
  </Logins>
</PasswordSettings>