Как создать новую строку с элементом xml unity?
мне нужно создавать новый элемент на новой строке в файле xml, но вместо этого, при вызове функции у меня переписывается весь файл
мой код:
using UnityEngine;
using System.Xml.Linq;
using System.IO;
public class playerpref : MonoBehaviour
{
private string path;
private void Awake()
{
path = Application.dataPath + @"/Resources/UserData.xml";
}
public XElement GetElement()
{
XAttribute one = new XAttribute("one", "123");
XAttribute two = new XAttribute("two", "123");
XElement element = new XElement("userDate", "user", one, two);
return element;
}
public void Save()
{
XElement root = new XElement("root");
root.Add(GetElement());
Debug.Log(root);
XDocument saveDoc = new XDocument(root);
File.WriteAllText(path, saveDoc.ToString());
Debug.Log(path);
}
}
Сейчас при двойном вызове функции строение xml файла такое:
<root>
<userDate one="123" two="123">user</userDate>
</root>
Мне нужно, что бы строение выглядело так:
<root>
<userDate one="123" two="123">user</userDate>
<userDate one="123" two="123">user</userDate>
</root>
как это реализовать?
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
Можно создать такую структуру данных.
using System.Xml;
using System.Xml.Serialization;
public class userRecord
{
[XmlAttribute]
public string one;
[XmlAttribute]
public string two;
public userRecord() { }
public userRecord(string one, string two)
{
this.one = one;
this.two = two;
}
}
Написать вот такой метод сохранения
private void Save(string path, List<userRecord> records)
{
using (Stream fs = File.Create(path))
{
XmlSerializer xs = new XmlSerializer(typeof(List<userRecord>), new XmlRootAttribute("root"));
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
xs.Serialize(fs, records, ns);
}
}
Создать тестовые данные
List<userRecord> records = new List<userRecord>();
records.Add(new userRecord("123", "456"));
Вот так сохранить
Save("UserData.xml", records);
На выходе получится файл
<?xml version="1.0" encoding="utf-8"?>
<root>
<userRecord one="123" two="456" />
</root>
Теперь нужен метод загрузки данных из файла
private List<userRecord> Load(string path)
{
using (Stream fs = File.OpenRead(path))
{
XmlSerializer xs = new XmlSerializer(typeof(List<userRecord>), new XmlRootAttribute("root"));
return (List<userRecord>)xs.Deserialize(fs);
}
}
Готово, можно загрузить, добавить строку и сохранить обратно
List<userRecord> records = Load("UserData.xml");
records.Add(new userRecord("789", "012"));
Save("UserData.xml", records);
Получится вот такой XML
<?xml version="1.0" encoding="utf-8"?>
<root>
<userRecord one="123" two="456" />
<userRecord one="789" two="012" />
</root>
Примеры сериализации посложнее