Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > .NET Languages
You last visited: Today at 02:14

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[Neuling] C# XML-Datei ändern

Discussion on [Neuling] C# XML-Datei ändern within the .NET Languages forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 175
The Black Market: 233/4/1
Join Date: Apr 2011
Posts: 4,923
Received Thanks: 401
[Neuling] C# XML-Datei ändern

Guten Tag,
da ich mich seit wenigen Tagen mit C# beschäftige, wollte ich ein wenig rumprobieren mit den Lesen und Schreiben von XML-Dateien. Dafür habe
ich ein kleiner Projekt angelegt, hier der Quellcode:

PHP Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;


namespace 
nostale
{
    class 
Program
    
{
        static 
void Main(string[] args)
        {
            
Console.Title "NosTale Gold";
            
string befehl "";
            

            while (
befehl != "/exit")
            {
#region einstellungen
                
                
                
string input;
                
                
int zahlergebnis;
                
                
XmlReader reader XmlReader.Create(@"C:\Users\Jonas\Desktop\gold.xml");
                
reader.ReadStartElement("Gold");
                
                
reader.ReadStartElement("ic");
                
string ic reader.ReadString();
                
reader.ReadEndElement();

                
reader.ReadStartElement("drop");
                
string drop reader.ReadString();
                
reader.ReadEndElement();

                
reader.ReadStartElement("npc");
                
string npc reader.ReadString();
                
reader.ReadEndElement();

                
reader.ReadStartElement("player");
                
string player reader.ReadString();
                
reader.ReadEndElement();

                
reader.ReadStartElement("reward");
                
string reward reader.ReadString();
                
reader.ReadEndElement();

                
reader.ReadStartElement("all");
                
string all reader.ReadString();
                
reader.ReadEndElement();

                
reader.Close();



#endregion

#region goldanzahl
                
                        

                
DateTime Zeit DateTime.Now;
                
Zeit.ToString("yyyy-MM-dd_HH:mm:ss");

                
Console.WriteLine("Letzte Aenderung:");
                
Console.WriteLine(Zeit);
                
Console.WriteLine("");
                
Console.WriteLine("************************************************************");
                
Console.WriteLine("");
                
Console.WriteLine("Instant Combat      :  {0} Gold"ic);
                
Console.WriteLine("Gesammelt           :  {0} Gold"drop);
                
Console.WriteLine("Verkauft an NPC     :  {0} Gold"npc);
                
Console.WriteLine("Verkauft an Spieler :  {0} Gold"player);
                
Console.WriteLine("Quest/Ts Belohnung  :  {0} Gold"reward);
                
Console.WriteLine("___________________________________________________________");
                
Console.WriteLine("Gesamt              :  {0} Gold"all);
                
Console.WriteLine("___________________________________________________________");
                
Console.WriteLine("");
                
befehl Console.ReadLine();
#endregion


#region befehle

                
switch (befehl)
                {
                    case 
"/ic":



                        
Console.WriteLine("Wie viel?");
                        
input Console.ReadLine();
                        
zahl Convert.ToInt32(input);

                        
ergebnis Convert.ToInt32(ic) + zahl;
                        
                        
/* Und das Ergebnis soll in der XML-Datei aktualisiert werden 
                           Also soll es dann so aussehen: <ic>ergebnis</ic> 
                           das gleiche bei den anderen auch*/
                    
break; 

                    case 
"/drop":

                        
Console.WriteLine("Wie viel?");
                        
input Console.ReadLine();
                        
zahl Convert.ToInt32(input);

                        
ergebnis Convert.ToInt32(drop) + zahl;

                        break;

                    case 
"/npc":



                        
Console.WriteLine("Wie viel?");
                        
input Console.ReadLine();
                        
zahl Convert.ToInt32(input);

                        
ergebnis Convert.ToInt32(npc) + zahl;

                        break;

                    case 
"/player":

                        
Console.WriteLine("Wie viel?");
                        
input Console.ReadLine();
                        
zahl Convert.ToInt32(input);

                        
ergebnis Convert.ToInt32(player) + zahl;

                        break;

                    case 
"/reward":



                        
Console.WriteLine("Wie viel?");
                        
input Console.ReadLine();
                        
zahl Convert.ToInt32(input);

                        
ergebnis Convert.ToInt32(reward) + zahl;

                        break;

                    case 
"/all":

                        
Console.WriteLine("Wie viel?");
                        
input Console.ReadLine();
                        
zahl Convert.ToInt32(input);

                        
ergebnis Convert.ToInt32(all) + zahl;

                        break;



                }
                
#endregion


             
Console.Clear();
            }
        }


    }

Wie man unten sieht, habe ich ein Kommentar geschrieben

Quote:
/* Und das Ergebnis soll in der XML-Datei aktualisiert werden
Also soll es dann so aussehen: <ic>ergebnis</ic> das gleiche bei den anderen auch*/
Jou, ich will die Datei nicht immer neu schreiben lassen, sondern nur den Wert ersetzen. Hat da jmd. eine Idee, wie ich das hinbekommen könnte?
Hydroxyandrost is offline  
Old 03/29/2013, 14:18   #2
 
elite*gold: 0
Join Date: Nov 2011
Posts: 69
Received Thanks: 14
Du kannst eine XML-Klasse einbinden die dir dann z.B. Nodes zu Verfügung stellt.
Mit diesen Nodes kannst du dann die entsprechenden Werte auslesen/ersetzen/lesen/schreiben/etc.

Das würde grob so aussehen: ParentNode.ChildNode.Value(DEIN WERT);

Dafür musst du aber die XML-Datei auch mit diesen entsprechenden Knoten aufbauen was bei dir nicht der Fall ist(oder extern gelöst wurde).

Ansonsten fällt mir hier nur ein einfach mit entsprechendem "replace()" zu arbeiten.
disortion is offline  
Thanks
1 User
Old 03/29/2013, 18:53   #3
 
elite*gold: 0
Join Date: May 2010
Posts: 793
Received Thanks: 268
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.
nkkk is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
Datei Name ändern?
12/17/2011 - Metin2 Private Server - 4 Replies
Dummerweise habe ich ebend ausvershen eine Datei unbenannt in FileZilla.. Jetzt kann ich nicht mehr per FileZilla Connecten. Kann ich den Datein Name wohl per VirtualBox (Per Code) wieder umändern? Wie es vorher hieß, weiss Ich.
xtrap host datei ändern
05/11/2011 - Last Chaos - 3 Replies
eien frage zur xtrap host datei ,die datei also die xtrap connecten lässt bezüglich updates ziehen von xtrap usw. kan mir jemand sagen welche datei genau in welcher weise geändert werden muss um dieses insgesamt zu unterbinden? pn währe nett hierzu mit infos. thx gibts auch
(TuT) Musik Datei ändern <|
04/04/2011 - Combat Arms - 5 Replies
- Als erstes geht ihr in den Combat Arms Eu Ordner und dann in den Ordner BGM dort findet ihr die Datein BGM_LOOP und WAITINGROOM_LOOP diese sichert ihr ab falls was schief laufen sollte. - Jetzt macht ihr eine Kopie von eurer Musik Datei die ihr dann später als Lobby Musik haben wollt und bennent sie auf WAITINGROOM_LOOP und BGM_LOOP. -Diese tauscht ihr dann mit denen im BGM Ordner aus und jetzt habt Spass bei Musik hören ;) Vorsicht nur Mp3 Format empfehle den als Mp3 Converter >> Free...
.Inf datei unbemerkt ändern?
10/11/2010 - AutoIt - 12 Replies
Hallo, ich spiele derzeit ein spiel namens "Stranded II" dafür möchte ich einen kleinen Hack erstellen wodurch man unendlich leben hat. Da fast alle werte in .Inf dateien geschrieben sind, und sie sich per "Editor" öffnen lassen, habe ich gesehen das dort : health=100 steht, wenn ich dies ändere habe ich auch mehr leben, wie kann ich diesen eintrag per AutoIt verändern? Ich hoffe auf "positive" antworten, habe in Google nichts hilfreiches gefunden )= MfG WiiZocker
Quest-Datei Format ändern?
10/09/2010 - Metin2 Private Server - 2 Replies
Hey Com, Vor kurzem habe ich ausversehen die Quest main_quest_gotinformation1 geändert von der Quest-Datei zum Editor, weiss jemand wie ich das wieder zur Quest-Datei machen kann?! denn als Editor geht die Datei nicht :D Danke im voraus mfg



All times are GMT +2. The time now is 02:14.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.