Entwickler-Ecke
IO, XML und Registry - Xml bestimmte Daten einlesen nach Parameter
Actionscript-Gordon - Fr 29.01.10 11:52
Titel: Xml bestimmte Daten einlesen nach Parameter
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 ^^
Kha - Fr 29.01.10 17:01
:welcome:
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 - 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 - 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 - 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 - Mo 01.02.10 17:14
Dann mach doch :o
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 - 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 - Mi 03.02.10 17:16
Hm könntet ihr mir noch einmal helfen wie ich das Objekt nach dem Incentivename durchsuche?
danielf - 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 - 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 - 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 - Do 04.02.10 10:32
Danke
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!