warum genau willst du datei nicht neu schreiben lassen? Die datei scheint mir nicht so gross , dass das ins gewicht fallen würde.
Ich persönich benutzte XmlReader eher selten, C# gibt die da viele alternativen(XmlReader, XmlSeralizer ,Xdocument (aka Linq to xml), XmlDucument(eher veraltet)), ich benutzte am liebsten XmlSeralizer und XDocument.
XmlReader kann nur xml dateien lesen (Reader = leser)
hier wie ich es machen würde(muss nicht zu 100% richtig sein da ich nicht weis wie deine xml datei aussieht)
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
using System.IO;
namespace ConsoleApplication1
{
class Programm
{
static void Main(string[] args)
{
var s = File.Open("gold.xml",FileMode.Open);
var ser = new XmlSerializer(typeof(XmlGold));
var gold = (XmlGold) ser.Deserialize(s);
s.Close();
foreach (var p in typeof(XmlGold).GetProperties())
Console.WriteLine(p.Name + " hat den wert: " + p.GetValue(gold, null));
Console.WriteLine("Welchen wert wollen sie ändern?");
var wert_name = Console.ReadLine().TrimStart('/');
Console.WriteLine("um wieviel wollen sie ändern?");
var wert_delta = Int32.Parse(Console.ReadLine().TrimStart('/'));
foreach (var p in typeof(XmlGold).GetProperties())
if (p.Name == wert_name)
{
p.SetValue(gold, (Int32)p.GetValue(gold, null) + wert_delta, null);
break;
}
s = File.Open("gold.xml", FileMode.Truncate);
ser.Serialize(s, gold);
s.Close();
}
}
[XmlType(TypeName="Gold")]
public class XmlGold
{
[XmlElement(ElementName = "ic")]
public Int32 ic { get; set; }
[XmlElement(ElementName = "drop")]
public Int32 drop { get; set; }
[XmlElement(ElementName = "player")]
public Int32 player { get; set; }
[XmlElement(ElementName = "reward")]
public Int32 reward { get; set; }
[XmlElement(ElementName = "all")]
public Int32 all { get; set; }
}
}
das hat jetzt noch nciht alles z.B. gibt es nicht das datum aus...
Ps: ich würde "all" nicht als eigenständigen wert speichern sondern bei der ausgabe einfach all die davor summieren.