Существует множество способов написания XML в .NET.Вот способ использования XmlWriter
, который работает для очень простого контента, как в этом случае:
string text1 = /* get value of textbox */;
string text2 = /* get value of textbox */;
string text3 = /* get value of textbox */;
// Set indent=true so resulting file is more 'human-readable'
XmlWriterSettings settings = new XmlWriterSettings() { Indent = true };
// Put writer in using scope; after end of scope, file is automatically saved.
using (XmlWriter writer = XmlTextWriter.Create("file.xml", settings))
{
writer.WriteStartDocument();
writer.WriteStartElement("root");
writer.WriteElementString("text1", text1);
writer.WriteElementString("text2", text2);
writer.WriteElementString("text3", text3);
writer.WriteEndElement();
}
Одно замечание: вам следует избегать операций с файлами в потоке пользовательского интерфейса, так как это можетможет привести к блокировке (например, диск может работать медленно и вызвать зависание пользовательского интерфейса во время записи файла, или он может записывать данные в сетевое расположение и некоторое время зависать при подключении).Лучше всего открыть диалоговое окно прогресса и отобразить сообщение «Пожалуйста, подождите, пока файл будет сохранен ...» и выполните операцию с файлом в фоновом режиме;простой способ - опубликовать фоновую операцию в пуле потоков , используя BeginInvoke
/ EndInvoke
.
Если вы хотите использовать вместо этого XmlSerializer, тогда вы должны следовать этимшаги:
- Создайте тип
public
, который будет выступать в качестве корневого элемента вашего документа, и пометьте его XmlRoot
. - Добавить элементы / атрибуты.из простых или встроенных типов или из ваших собственных
public
пользовательских типов, которые также можно сериализовать в формате XML, помечая их XmlElement
или XmlAttribute
при необходимости. - Чтобы записать данные, используйте
XmlSerializer.Serialize
с соответствующими Stream
, StreamWriter
или XmlWriter
вместе с корневым объектом. - Чтобы прочитатьверните данные, используйте
XmlSerializer.Deseralize
с соответствующим Stream
, TextReader
или XmlReader
, приведя тип возврата к корневому объекту.
Полная выборка.
Тип для сериализации:
[XmlRoot("customer")]
public class CustomerData
{
// Must have a parameterless public constructor
public CustomerData()
{
}
[XmlElement("name")]
public string Name { get; set; }
[XmlElement("city")]
public string City { get; set; }
[XmlElement("company")]
public string Company { get; set; }
public override string ToString()
{
return
"Name=[" + this.Name + "] " +
"City=[" + this.City + "] " +
"Company=[" + this.Company + "]";
}
}
Код для чтения / записи данных:
// Initialize the serializer to write and read the data
XmlSerializer serializer = new XmlSerializer(typeof(CustomerData));
// Initialize the data to serialize
CustomerData dataToWrite = new CustomerData()
{
Name = "Joel Spolsky",
City = "New York",
Company = "Fog Creek Software"
};
// Write it out
XmlWriterSettings settings = new XmlWriterSettings() { Indent = true };
using (XmlWriter writer = XmlTextWriter.Create("customer.xml", settings))
{
serializer.Serialize(writer, dataToWrite);
}
// Read it back in
CustomerData dataFromFile = null;
using (XmlReader reader = XmlTextReader.Create("customer.xml"))
{
dataFromFile = (CustomerData)serializer.Deserialize(reader);
}
Console.WriteLine(dataFromFile);