Изменять значение дочернего узла в XML C#

166
26 октября 2018, 18:20

В этом XML файле

<?xml version="1.0" encoding="utf-8" ?>
<user>
<score>5</score>
<login>admin</login>
</user>

Нужно прибавить к значению узла score (здесь 5) ещё некое значение (например 3) Пытался через foreach искать во всех узлах но начал теряться. Вот мой код C#

        int gets;
        InitializeComponent();
        XmlDocument xml = new XmlDocument();
        xml.Load("INFO1.xml");
        XmlElement xroot = xml.DocumentElement;
        foreach (XmlNode xnode in xroot)
        {
            foreach (XmlNode childnode in xnode.ChildNodes)
            {
                if (childnode.Name == "score")
                {
                    gets = childnode.InnerText.ToInt();
                    gets += Form1.Score;
                    xnode.RemoveChild(childnode);
                }
            }
        }

Удалить узел то я удалил, а создать с новым значением не смог. И важно сохранить значение, которое было до операции. Как можно изменить значение без удаления или что сделать для комфортной работы без критичных изменений? P.S Метод расширение ToInt конвертирует в int32.

Answer 1

Если игроков (пользователей) только 1 такой код вполне юзабилен.

XmlDocument xml = new XmlDocument();
xml.Load("INFO1.xml");
xml.DocumentElement.ChildNodes[0].ChildNodes[0].Atributes[0].Value = тут значение;
xml.Save("INFO1.xml");

Но тогда структуру файла нужно изменить на:

<?xml version="1.0" encoding="utf-8" ?>
<users>
    <user id="0">
        <score value="0"/>
    </user>
</users>

Но если игроков больше чем 1 тогда такой код:

XmlDocument xml = new XmlDocument();
xml.Load("INFO1.xml");
foreach(var user in xml.DocumentElement.ChildNodes)
{
    if (user.Atributes[0].Value == "0")
    {
        //Тут работаем с атрибутами и дочерними узлами
    }
}
xml.Save("INFO1.xml");

Структура XML

<?xml version="1.0" encoding="utf-8" ?>
<users>
    <user id="0">
        <score value="0"/>
    </user>
    <user id="1">
        <score value="228"/>
    </user>
</users>