C# 将列表追加到XML
我试图将我的列表附加到XML文件中 我有我的c#classC# 将列表追加到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
密码设置
,其中包含一些属性:
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>