Добавление в XML-файл - PullRequest
       3

Добавление в XML-файл

0 голосов
/ 18 марта 2012

Я делаю WPF, который просматривает XML-файл, извлекая информацию о ресторане.XML имеет следующий формат:

    <FoodPhoneNumbers>
      <Restaurant Name="Pizza Place">
        <Type>Pizza</Type>
        <PhoneNumber>(123)-456-7890</PhoneNumber>
        <Hours>
          <Open>11:00am</Open>
          <Close>11:00pm</Close>
        </Hours>
      </Restaurant>
    </FoodPhoneNumbers>

Я хочу добавить новый ресторан в XML-файл.У меня есть текстовое поле для названия ресторана и типа.Затем три текстовых поля для номера телефона.4 комбинированных списка для открытия часа, открытия минуты, закрытия часа и закрытия минуты.У меня также есть 2 списка для выбора AM или PM для времени открытия и закрытия.

Я предполагаю, что использую XmlTextWriter, но не могу понять, как добавить текст в существующий XML-файл.

Ответы [ 2 ]

10 голосов
/ 18 марта 2012

Самый простой способ - не использовать XmlTextWriter - это просто загрузить целое в представление в памяти, добавить новый элемент, а затем сохранить.Очевидно, что это не очень эффективно для больших файлов, но это действительно просто, если вам это сойдет с рук.Например, используя XDocument:

XDocument doc = XDocument.Load("test.xml");
XElement restaurant = new XElement("Restaurant",
    new XAttribute("Name", "Frenchies"),
    new XElement("Type", "French"),
    new XElement("PhoneNumber", "555-12345678"),
    new XElement("Hours",
         new XElement("Open", "1:00pm"),
         new XElement("Close", "2:00pm")));
doc.Root.Add(restaurant);
doc.Save("test.xml");

Или, лучше:

XDocument doc = XDocument.Load("test.xml");
Restaurant restaurant = ...; // Populate a Restaurant object

// The Restaurant class could know how to serialize itself to an XElement
XElement element = restaurant.ToXElement();  

doc.Root.Add(element);
2 голосов
/ 18 марта 2012

Для этого можно использовать экземпляр класса XmlSerializer.

[XmlRoot("FoodPhoneNumbers")]
public class FoodPhoneNumbers
{
    [XmlElement(ElementName = "Restaurant")]
    public List<Restaurant> Restaurants { get; set; }
}

public class Restaurant
{
    [XmlAttribute]
    public string Name { get; set; }

    [XmlElement]
    public string Type { get; set; }

    [XmlElement]
    public string PhoneNumber { get; set; }

    [XmlElement(ElementName = "Hours")]
    public List<Hours> Hours { get; set; }
}

public class Hours
{
    [XmlElement]
    public string Open { get; set; }

    [XmlElement]
    public string Close { get; set; }
}

Код сериализации / десериализации:

// Deserialize.
FoodPhoneNumbers food;
using (Stream inputStream = File.OpenRead(inputFilePath))
    food = (FoodPhoneNumbers) xmlSerializer.Deserialize(inputStream);

// Add a new one.
Restaurant restaurant = new Restaurant
    {
        Name = "Coffee restraurant",
        PhoneNumber = "0xFF",
        Type = "Coffee shop"
    };
food.Restaurants.Add(restaurant);

// Serialize.
using (Stream outputStream = File.OpenWrite(outputFilePath))
    xmlSerializer.Serialize(outputStream, food);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...