XML File Auslesen

  • C#

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    XML File Auslesen

    Hallo zusammen

    Ich habe nun längers gesuch und bin leider nicht fündig geworden. Ich habe bereits XML Dateien die ich auslede. Das Problem ist aber dass das jetzige XML-File anderst aufgebaut ist als sonnst.
    Ein File das so ausshiet:

    XML-Quellcode

    1. <root>
    2. <Brand name="Brand1">
    3. <product name="Product1" />
    4. <product name="Product2" />
    5. </Brand>
    6. <Brand name="Brand2">
    7. <product name="Product3" />
    8. <product name="Product4" />
    9. </Brand>
    10. </root>

    oder so

    XML-Quellcode

    1. <?xml version="1.0"?>
    2. <ArrayOfEmployee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    3. <Employee>
    4. <Id>1</Id>
    5. <Name>Venki Chikkanti</Name>
    6. <Dept>Development</Dept>
    7. </Employee>
    8. <Employee>
    9. <Id>2</Id>
    10. <Name>Matt</Name>
    11. <Dept>Management</Dept>
    12. </Employee>
    13. </ArrayOfEmployee>


    ist absolut kein Problem.
    Nun aber mein neu erhaltenes XML sieht wie nachstehend aus. Normalerweise sind noch ca. 1000 weitere Artikel aufgeführt der einfachheitshalber habe ich es auf einen Artikel gekürzt. Jeder Artikel ist innerhalt von Artikelliste und hat ein Header und Artikel Teil.

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <Artikelliste>
    3. <Header>
    4. <Preisanbieter>Firma ABC AG</Preisanbieter>
    5. <Datum>25.09.2021</Datum>
    6. </Header>
    7. <Artikel>
    8. <Nr>100000000</Nr>
    9. <LieferantenArtikelNummer>2222222</LieferantenArtikelNummer>
    10. <Lieferantennummer>132</Lieferantennummer>
    11. <LieferantenName>Firma Beispie GmbH</LieferantenName>
    12. <Lieferstatus>0</Lieferstatus>
    13. <Preis>110.00</Preis>
    14. <Preismenge>100</Preismenge>
    15. <Rabatt>5.00%</Rabatt>
    16. <Warengruppe>0000000001</Warengruppe>
    17. <Logistik>
    18. <Masseinheit>MTR</Masseinheit>
    19. <Inhaltseinheit> </Inhaltseinheit>
    20. <Inhaltsmenge>0.00</Inhaltsmenge>
    21. <Mindestbestellmenge>3.00</Mindestbestellmenge>
    22. <Interval>3.00</Interval>
    23. </Logistik>
    24. </Artikel>
    25. </Artikelliste>


    Führe ich den nachstehenden Code aus so erhalte ich den Fehler: InvalidOperationException: <Artikelliste xmlns=''> was not expected.
    Klar weil dieses XML-File nicht mit Artikellist =ETWAS arbeitet. Was muss ich im nachstehenden Code anpassen damit ich das File auslesen kann und in ein DataGrid übergeben kann?

    C#-Quellcode

    1. private void cmd_Import_Click(object sender, RoutedEventArgs e)
    2. {
    3. var path="";
    4. OpenFileDialog open = new OpenFileDialog();
    5. if (open.ShowDialog() == true)
    6. {
    7. path = open.FileName;
    8. }
    9. List<Artikelliste> emps = new List<Artikelliste>();
    10. XmlDocument xmlDocument = new XmlDocument();
    11. xmlDocument.Load(path);
    12. string xmlString = xmlDocument.OuterXml;
    13. using (StringReader read = new StringReader(xmlString))
    14. {
    15. Type outType = typeof(List<Artikelliste>);
    16. XmlSerializer serializer = new XmlSerializer(outType);
    17. using (XmlReader reader = new XmlTextReader(read))
    18. {
    19. emps = (List<Artikelliste>)serializer.Deserialize(reader);
    20. reader.Close();
    21. }
    22. read.Close();
    23. }
    24. foreach (var item in emps)
    25. {
    26. MessageBox.Show(item.Preisanbieter + " " + item.Datum + " " + item.ENr);
    27. }
    28. }
    29. public class Artikelliste
    30. {
    31. public string Preisanbieter { get; set; }
    32. public string Datum { get; set; }
    33. public string Nr { get; set; }
    34. public double Preis { get; set; }
    35. }


    Gruss und Danke
    So auf den ersten Blick stimmt das Datenmodell überein. Die Artikelliste müsse eine Liste von Artikeln als Property enthalten.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Zeile#5 geht (bei mir) nicht, da ShowDialog kein bool zurückgibt. Und in Z#27 ist n Fehler drin, weil es .ENr nicht gibt.

    Nee, das Datenmodell stimmt nicht. Header und Artikel sind nicht Teil der Artikellisten-Klasse.
    Mit so ner XML

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <Artikelliste>
    3. <Artikel>
    4. <Preisanbieter>Firma ABC AG</Preisanbieter>
    5. <Datum>25.09.2021</Datum>
    6. <Nr>100000000</Nr>
    7. <Preis>110.00</Preis>
    8. </Artikel>
    9. </Artikelliste>

    und so nem Code

    C#-Quellcode

    1. private void button1_Click(object sender, EventArgs e)
    2. {
    3. var path = "";
    4. OpenFileDialog open = new OpenFileDialog();
    5. if (open.ShowDialog() == DialogResult.OK)
    6. {
    7. path = open.FileName;
    8. }
    9. List<Artikel> emps = new List<Artikel>();
    10. XmlDocument xmlDocument = new XmlDocument();
    11. xmlDocument.Load(path);
    12. string xmlString = xmlDocument.OuterXml;
    13. using (StringReader read = new StringReader(xmlString))
    14. {
    15. Type outType = typeof(List<Artikel>);
    16. XmlRootAttribute xRoot = new XmlRootAttribute();
    17. xRoot.ElementName = "Artikelliste";
    18. XmlSerializer serializer = new XmlSerializer(outType, xRoot);
    19. using (XmlReader reader = new XmlTextReader(read))
    20. {
    21. emps = (List<Artikel>)serializer.Deserialize(reader);
    22. reader.Close();
    23. }
    24. read.Close();
    25. }
    26. foreach (var item in emps)
    27. {
    28. MessageBox.Show(item.Preisanbieter + " " + item.Datum + " " + item.Nr);
    29. }
    30. }
    31. public class Artikel
    32. {
    33. public string Preisanbieter { get; set; }
    34. public string Datum { get; set; }
    35. public string Nr { get; set; }
    36. public double Preis { get; set; }
    37. }
    38. }

    klappt's
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.