Я пытаюсь добавить свой список в файл XML.
У меня есть класс С# 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>
Я пробовал несколько методов, и я либо получаю нулевые указатели, либо ничего не записывается. Я предполагаю, что нулевой указатель может быть вызван тем, что файл XML пуст, но я просто хочу добавить этот список в виде структуры XML.
да именно так
Итак, вы знаете, что вам нужно загрузить файл перед добавлением нового элемента? если файл большой это не хорошо..
Можете ли вы опубликовать шаблон XML-файла, с которого вы начинаете?
В ней ничего нет, так как она пуста. Вызывается Passwords.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:
<?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>
в окончательном xml корнем является PasswordSettings, и у вас много элементов входа?