我正在尝试将列表附加到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结构。
答案 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>