Добавить запись в Xml ASP.Net MVC5

2

Основываясь на индексе в контроллере, как мне добавить запись в файл XML? Я провел какое-то исследование, но, похоже, я не могу его обмануть.

Индекс (контроллер)

public ActionResult Index(string sortOrder)
{
    XmlDocument doc = new XmlDocument();
    doc.Load("C:\\Users\\Matt.Dodson\\Desktop\\SampleWork\\PersonsApplicationFromXMLFile\\PersonsApplicationFromXMLFile\\DAL\\Personal.xml");
    IEnumerable<Personal> persons = doc.SelectNodes("/Persons/record").Cast<XmlNode>().Select(node => new Personal()
    {
        ID = node["ID"].InnerText,
        Name = node["Name"].InnerText,
        Email = node["Email"].InnerText,
        DateOfBirth = node["DateOfBirth"].InnerText,
        Gender = node["Gender"].InnerText,
        City = node["City"].InnerText
    });

    switch (sortOrder)
    {
        case "ID":
            persons = persons.OrderBy(Personal => Personal.ID);
            break;

        case "Name":
            persons = persons.OrderBy(Personal => Personal.Name);
            break;

        case "City":
            persons = persons.OrderBy(Personal => Personal.City);
            break;

        default:
            break;
    }

    return View(persons.ToList());
}

Что я пробовал:

Создать (контроллер)

    [HttpPost]
    public ActionResult Create(FormCollection collection)
    {
        string xmlFile = "C:\\Users\\Matt.Dodson\\Desktop\\SampleWork\\PersonsApplicationFromXMLFile\\PersonsApplicationFromXMLFile\\DAL\\Personal.xml";
        try
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(xmlFile);
            IEnumerable<Personal> persons = doc.SelectNodes("/Persons/record")
                .Cast<XmlNode>()
                .Select(node => new Personal()
                {
                    ID = node["ID"].InnerText,
                    Name = node["Name"].InnerText,
                    Email = node["Email"].InnerText,
                    DateOfBirth = node["DateOfBirth"].InnerText,
                    Gender = node["Gender"].InnerText,
                    City = node["City"].InnerText
                });
            persons.appendTo(xmlFile);
            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
    }

Я плохо разбираюсь в синтаксисе, так что это, вероятно, все неправильно.

  • 0
    Вы хотите добавить или обновить эту конкретную запись?
  • 0
    Добавить запись, у меня есть вид для создания записи, я просто хочу добавить запись в файл, и я не знаю, с чего начать.
Показать ещё 2 комментария
Теги:
razor
model-view-controller

1 ответ

1
Лучший ответ

Для начинающих, которые являются несколькими классами, доступными на С#, в соответствии с конкретным классом, который вы используете, вы должны иметь возможность сделать следующее

XDocument doc = XDocument.Load(xmlFile);
        var parent = doc.Descendants("NameOfParentTag").FirstOrDefault();//if there is only one
        parent.Add(new XElement("personal",
            new XElement("ID", ID_Value),
            new XElement("Name" = Name_Value),
            new XElement("Email", Email_value)));
        doc.Save(xmlFile);

Это добавит значение к вашему xmlFile, NameOfParentTag - это имя parentLocation, где вы хотите вставить значение, в вашем случае я бы предположил, что это будет record

Второй способ

doc.Load(xmlFile);
                XmlNode editNode = doc.SelectSingleNode("targetNode");
                XmlNode node = nodes[0];//get the specific node, not sure about your xml structure
                XmlElement elem = node.OwnerDocument.CreateElement("personal");
                elem.InnerXml = personal.SerializeAsXml();
                node.AppendChild(elem);

где выглядит метод SerializeAsXml

public static string SerializeAsXml(this Personal personal)
        {
            var emptyNamepsaces = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
            var settings = new XmlWriterSettings();
            settings.Indent = true;
            settings.OmitXmlDeclaration = true;

            //serialize the binding
            string xmlOutput = string.Empty;
            using (StringWriter stream = new StringWriter())
            using (XmlWriter xmlWriter = XmlWriter.Create(stream, settings))
            {
                XmlSerializer serializer = new XmlSerializer(personal.GetType());
                serializer.Serialize(xmlWriter, obj, emptyNamepsaces);
                xmlOutput = stream.ToString();
            }

            return xmlOutput;
        }

NB, для вышеуказанного метода вам нужно будет украсить ваш XML с необходимыми атрибутами

Ещё вопросы

Сообщество Overcoder
Наверх
Меню