Autor |
Beitrag |
Actionscript-Gordon
Hält's aus hier
Beiträge: 7
|
Verfasst: Fr 29.01.10 11:52
Hi ich habe folgendes Problem ich versuche eine Komplexe XML einzulesen in der auch viele für mich nicht wichtige Daten vorhanden sind. Ich gebe euch am Besten mal ein Beispiel:
XML-Daten 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| <Incentive IncentiveName="Test30"> <Conditions> <ProductCondition Product="123,124,125" ProductRatio="1;1;1"/> </Conditions> <Rewards> <ProductReward Product="126" </Rewards> </Incentive> |
Mein Problem ist nun das ich mehrere <Incentive> habe und nicht genau weiss wie ich diese auslesen lassen kann. Deserilisation wäre eine Möglichkeit die mir nun auch schon im Kopf rum schwirrt. Ich kann ja mit folgendem Code deserialisierte Xml-Dokumente wie Klassen aufrufen:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7:
| string reward1 = "Test30";
var i1 = new IncentivesIncentive(); i1.IncentiveName = reward1; i1.Rewards = new IncentivesIncentiveRewards(); i1.Rewards.ProductReward = new IncentivesIncentiveRewardsProductReward(); i1.Rewards.ProductReward.Product = "138"; |
Jedoch kann ich eine Xml-Datei während der Laufzeit Deserialisieren manipulieren und dann wieder Serialisieren? Falls ja wie?
Moderiert von Christian S.: XML-Tags hinzugefügt
Moderiert von Christian S.: C#-Tags hinzugefügt
Oh ja Tags vergessen danke ^^
Zuletzt bearbeitet von Actionscript-Gordon am Mi 03.02.10 17:17, insgesamt 1-mal bearbeitet
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Fr 29.01.10 17:01
Actionscript-Gordon hat folgendes geschrieben : | Ich kann ja mit folgendem Code deserialisierte Xml-Dokumente wie Klassen aufrufen: |
Würde mal behaupten, das sind Objekte  .
Actionscript-Gordon hat folgendes geschrieben : | Jedoch kann ich eine Xml-Datei während der Laufzeit Deserialisieren manipulieren und dann wieder Serialisieren? Falls ja wie? |
Natürlich, das ist ja eigentlich die Hauptaufgabe von Serialisierung. Hast du dich denn schon darüber informiert / wie weit bist du gekommen?
_________________ >λ=
|
|
Actionscript-Gordon 
Hält's aus hier
Beiträge: 7
|
Verfasst: Mo 01.02.10 15:26
Hm ich finde eifnach nichts was mit weiterhelfen kann ich sehe immer nur den gleichen befehlt um den ganzen Bereich du deserialisieren. Wie kann ich jetzt aber erst eine datei deserialiseren und dann bestimmte dinge darin aufrufen ist ist mir noch etwas schleierhaft. Es würde mir natürlich ein kleiner denkanstoß reichen unter dem ich googlen kann aber wie gesagt ich suche nun seit 2 tagen danach und bei google gehen mir in der 4ten Seite langsam die Ideeen aus ^^
|
|
danielf
      
Beiträge: 1012
Erhaltene Danke: 24
Windows XP
C#, Visual Studio
|
Verfasst: Mo 01.02.10 15:39
Naja, den Begriff Serialisieren hast du ja schon. C# (GalileoOpenbook) hat darüber ja ein einfaches Kapitel.
Im Prinzip hast du:
Objekt --serialisierung--> Datei
Datei --deserialisieren--> Objekt
Wie du ein Objekt änderst ist dir ja klar?!
Wo ist dann das Problem?
Gruß Daniel
|
|
Actionscript-Gordon 
Hält's aus hier
Beiträge: 7
|
Verfasst: Mo 01.02.10 17:05
ich möchte es ja genau anders herum machen. Ich möchte eine Xml Deserialisieren die dann zur laufzeit verändern und dann wieder Seriealisieren oder muss ich die Datei dabei woanders zwischenspeichern?
|
|
danielf
      
Beiträge: 1012
Erhaltene Danke: 24
Windows XP
C#, Visual Studio
|
Verfasst: Mo 01.02.10 17:14
Dann mach doch
Wieso die Datei zwischenspeichern? Du arbeitest doch dann mit dem Objekt ...
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| System.Xml.Serialization.XmlSerializer s = new System.Xml.Serialization.XmlSerializer(typeof(object)); FileInfo b = new FileInfo("blub");
MyObject obj = null; using(Stream stream = b.OpenRead()) { obj = (MyObject) s.Deserialize(stream); }
obj.Value = 5;
using (Stream stream = b.OpenWrite()) { s.Serialize(stream, obj); } |
|
|
Actionscript-Gordon 
Hält's aus hier
Beiträge: 7
|
Verfasst: Mo 01.02.10 17:24
Ah das tut mir ja fast schon selber weh. Ich definiere das Objekt ja beim erstellen dann kann ich es natürlich auch verwenden.
Ich verstehe nicht wie mir das nicht auffallen konnte°° vielen dank ^^
|
|
Actionscript-Gordon 
Hält's aus hier
Beiträge: 7
|
Verfasst: Mi 03.02.10 17:16
Hm könntet ihr mir noch einmal helfen wie ich das Objekt nach dem Incentivename durchsuche?
|
|
danielf
      
Beiträge: 1012
Erhaltene Danke: 24
Windows XP
C#, Visual Studio
|
Verfasst: Mi 03.02.10 17:24
Nach dem was? Nach was durchsuchen?
Du sprichst in Rätsel ....
Aber wenn ich alle Puzzleteile zusammenfüge, sie durch ein Hexler lasse, durch den Ventilator schicke und mir anschaue wie sie auf dem Boden liegen bekomm ich es raus
Ich würde mal sagen, dass du gar kein Objekt hast was dem Xml entspricht. Und darüber hinaus kannst du das Xml-Dokument auch nicht anpassen. Deshalb würde ich sagen du Brauchst ein Objekt, dass dein Informationen repräsentiert. Nun gehst du hin und ließt das Xml ein. Für jeden "Incentive"-Knoten erzeugst du dann dieses Objekt was du wiederum in die Liste packst... und schon tut es 
|
|
Actionscript-Gordon 
Hält's aus hier
Beiträge: 7
|
Verfasst: Mi 03.02.10 17:49
Hm ich glaube wir reden an einernader vorbei ^^
Hmm grob gesagt möchte ich in einer XML bestimmte Bereiche suchen und darin Werte verändern. Vorbild für diese XML wäre das beispiel ganz oben.
|
|
danielf
      
Beiträge: 1012
Erhaltene Danke: 24
Windows XP
C#, Visual Studio
|
Verfasst: Mi 03.02.10 17:57
Ach es handelt sich um ein neues Thema/Fragestellung... dann mach auch einen neuen Thread auf.
Um ein Xml zu durchsuchen gibt es die programmiersprachenunabhängige Xpath-Ausdrücke. In .NET implementiert diese in XDocument oder XmlDocument (XDocument ist besser... laut KHA  ). Damit solltest du genug Input haben um nachzuschauen wie du ein Xml modifizieren kannst.
|
|
Actionscript-Gordon 
Hält's aus hier
Beiträge: 7
|
Verfasst: Do 04.02.10 10:32
|
|