Hallo,
ich habe xml Dateien die zu verschiedenen Versionen von XSD chemas gehören.
Z.B. Datei A = XSD Schema 2.1; Datei B= Schema 3.0, Datei C= Schema 3.1, etc...
Die Schemas unterscheiden sich nur in Details, der grundsätzliche Aufbau ist gleich.
Zur Verarbeitung habe ich aus den XSD Schemas Klassen generiert und jeweils in mein Projekt eingebunden.
Die Verarbeitung für eine XML Datei "xmlHPR" mit der Version 2.1 würde z.B. so aussehen:
Um jetzt die verschiedenen Versionen abzufangen hatte ich mir etwas in dieser Richtung vorgestellt:
Dies funktioniert natürlich so nicht (mehrmals Variable definiert und "itm" steht außerhalb der Bedingung nicht zur Verfügung).
Hat jemand eine Idee wie ich es vermeide für jede Version den Code der Verarbeitung zu Duplizieren?
Bin für jede Hilfe dankbar.
Gruß
Horten
ich habe xml Dateien die zu verschiedenen Versionen von XSD chemas gehören.
Z.B. Datei A = XSD Schema 2.1; Datei B= Schema 3.0, Datei C= Schema 3.1, etc...
Die Schemas unterscheiden sich nur in Details, der grundsätzliche Aufbau ist gleich.
Zur Verarbeitung habe ich aus den XSD Schemas Klassen generiert und jeweils in mein Projekt eingebunden.
Die Verarbeitung für eine XML Datei "xmlHPR" mit der Version 2.1 würde z.B. so aussehen:
C#-Quellcode
- //Deserilisation
- ser = new XmlSerializer(typeof(Harvester21.HarvestedProductionType));
- var itm = (Harvester21.HarvestedProductionType)ser.Deserialize(new StringReader(xmlHPR.OuterXml));
- //Daten verabeiten...
- int anzahlBaumarten = itm.Machine[0].SpeciesGroupDefinition.Length;
- int anzahlSortimente = itm.Machine[0].ProductDefinition.Length;
- etc....
Um jetzt die verschiedenen Versionen abzufangen hatte ich mir etwas in dieser Richtung vorgestellt:
C#-Quellcode
- XmlSerializer ser = null;
- switch (xmlVersion)
- {
- case "2.1":
- ser = new XmlSerializer(typeof(Harvester21.HarvestedProductionType));
- var itm = (Harvester21.HarvestedProductionType)ser.Deserialize(new StringReader(xmlHPR.OuterXml));
- break;
- case "3.0":
- ser = new XmlSerializer(typeof(Harvester30.HarvestedProductionType));
- var itm = (Harvester30.HarvestedProductionType)ser.Deserialize(new StringReader(xmlHPR.OuterXml));
- break;
- case "3.1":
- ser = new XmlSerializer(typeof(Harvester31.HarvestedProductionType));
- var itm = (Harvester31.HarvestedProductionType)ser.Deserialize(new StringReader(xmlHPR.OuterXml));
- break;
- }
- //Jetzt hier den Code zur Verarbeitung für alle Versionen gleich
- int anzahlBaumarten = itm.Machine[0].SpeciesGroupDefinition.Length;
- int anzahlSortimente = itm.Machine[0].ProductDefinition.Length;
Dies funktioniert natürlich so nicht (mehrmals Variable definiert und "itm" steht außerhalb der Bedingung nicht zur Verfügung).
Hat jemand eine Idee wie ich es vermeide für jede Version den Code der Verarbeitung zu Duplizieren?
Bin für jede Hilfe dankbar.
Gruß
Horten