将列表追加到XML

时间:2019-04-09 13:25:54

标签: c# xml linq

我正在尝试将列表附加到XML文件中。

我有c#类PasswordSettings,其中包含一些属性:

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

我有一个PasswordSettings这样的列表:

public List<PasswordSettings> Logins = new List<PasswordSettings>();

我现在将元素添加到对象中并将该对象添加到列表中:

PasswordSettings settings = new PasswordSettings();

settings.customerRef = "abc";
settings.name = "test";

Logins.add(settings);

现在,我想将此列表添加到XML文件中,因此最终得到如下结果:

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

如果我想添加另一个登录名,它将添加到XML文件中,即不替换或覆盖任何内容,因此使用新的<Logins>

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

1 个答案:

答案 0 :(得分:1)

这是创建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输出:

<?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>