Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Wie kann ich eine XML-Datei auslesen?
Kaladial
myCSharp.de - Member



Dabei seit:
Beiträge: 50

Themenstarter:

Wie kann ich eine XML-Datei auslesen?

beantworten | zitieren | melden

Hallo zusammen,

ich komm grad nicht weiter.

Ich habe eine XML bekommen die Inhalte enthält die ich so noch nicht kannte.

Wie kann ich so eine XML auslesen ?

<?xml version="1.0" encoding="UTF-8"?>
<order Version="1.0">
  <par name="ppo">245571_2007617_1</par>
  <par name="lotNumber">2007617</par>
  <par name="expirationDate">10/31/2023 00:00:00</par>
  <par name="productionDate">10/31/2020 00:00:00</par>
  <level name="B">
    <par name="gtin">06221032240842</par>
    <par name="sgtinSerial">
      <el>200761710100012</el>
      <el>200761710100019</el>
      <el>200761710100102</el>
      <el>200761710100184</el>
      <el>200761710100215</el>
      <el>200761710999957</el>
    </par>
    <par name="levelQty">11500</par>
  </level>
</order>

Ich versteh nicht was dieses par da spll.

Danke für die Hilfe

mfg Kala
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15702
Herkunft: BW

beantworten | zitieren | melden

par ist hier einfach nur ein XML Element.

XML Element
Google-Suche nach c# xml tutorial

Grundlagen Tutorial zu XML:
XML Documents and Data
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 1820
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

par klingt für mich nach Parameter und soll hier einen dynamischen Datenwert abbilden.
Du müsstest du Xml parsen und die Elemente dann entsprechend über das name Atribut mappen.

Entweder per XDocument oder per XmlReader.
Je nachdem wie groß die Xml Dateien sein können, wäre ein eigener Parser über einen XmlReader sinnvoll.
Im einfachsten Fall einfach per XDocument die Tags und Atribute auslesen und manuell mappen.
Ggf. kannst du auch mit richtigen Einstellungen einfach ein Objekt aus dem Xml deserialisieren lassen.
Müsste aber selbst erst schauen, ob dies so ohne weiteres machbar wäre.

T-Virus
Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
private Nachricht | Beiträge des Benutzers
Kaladial
myCSharp.de - Member



Dabei seit:
Beiträge: 50

Themenstarter:

beantworten | zitieren | melden

aber wie les ich das aus ?

ich hatte überlegt das mit der variante zu machen:


            XmlDocument xml = new XmlDocument();
            xml.LoadXml(xml_filemname); 

            XmlNodeList xnList = xml.SelectNodes("???");
            foreach (XmlNode xn in xnList)
            {
                string ppo = xn["ppo"].InnerText;
            }

aber was muss ich da bei ??? eingaben?
mal davon abgesehn das das auch nicht ging

xml.LoadXml(xml_filemname); schmeisst ne exception
{"Ungültige Daten auf Stammebene. Zeile 1, Position 1."}
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15702
Herkunft: BW

beantworten | zitieren | melden

Siehe Code Beispiel in der Dokumentation:
C# XmlDocument Class

Du musst nur den XPath setzen.
Select Nodes Using XPath Navigation
private Nachricht | Beiträge des Benutzers
Kaladial
myCSharp.de - Member



Dabei seit:
Beiträge: 50

Themenstarter:

beantworten | zitieren | melden

sorry aber die links bringen mir nicht wirklich was ...
kannst du mir an hand von nem kleinen beispiel das net mal erklären ?

ich schreib ja auch was ich bisher gemacht hab ...
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15702
Herkunft: BW

beantworten | zitieren | melden

Der Sinn ist ja der, dass Du lernst, wie der XPath funktioniert.
Wenn ich Dir jetzt die Lösung schreibe, dann lernst Du es ja nicht - sondern kopierst nur.

Die Links zeigen exakt, wie man den XPath baut:
- Beispiel XML
- Beispiel Path

Du musst das dann nur noch auf Dein XML übertragen.
private Nachricht | Beiträge des Benutzers
Kaladial
myCSharp.de - Member



Dabei seit:
Beiträge: 50

Themenstarter:

beantworten | zitieren | melden

habs selber raus gefunden

sinnvoller wäre aber der hinweis, das zum einen Load nicht LoadXML benutzt werden muss
und 2. das die Pfade immer die 1. elemente in dem xml sind

also das ich /order/par
oder /order/level/par/el schreiben muss um an die inhalte ran zu kommen und das die als "name"
beschriebenen elemente überhaupt keine wirkung haben und man sie nur im outer text findet...

das wären sinnvolle hilfen gewesen
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Kaladial am .
private Nachricht | Beiträge des Benutzers
Kaladial
myCSharp.de - Member



Dabei seit:
Beiträge: 50

Themenstarter:

beantworten | zitieren | melden

ich habs jetzt so:

try
            {
                xmlF = new XMLFile();

                string ppo = "";
                string lotNumber = "";
                string expirationDate = "";
                string productionDate = "";

                XmlDocument xml = new XmlDocument();
                xml.Load(xml_filemname);

                XmlNodeList xnList = xml.SelectNodes("/order/par");
                foreach (XmlNode xn in xnList)
                {
                    if (xn.OuterXml.Contains("ppo"))
                    {
                        ppo = xn.InnerText;
                    }
                    if (xn.OuterXml.Contains("lotNumber"))
                    {
                        lotNumber = xn.InnerText;
                    }
                    if (xn.OuterXml.Contains("expirationDate"))
                    {
                        expirationDate = xn.InnerText;
                    }
                    if (xn.OuterXml.Contains("productionDate"))
                    {
                        productionDate = xn.InnerText;
                    }
                }
                string gtin = "";
                string levelQty = "";
                List<string> sgtinSerial = new List<string>();

                xnList = xml.SelectNodes("/order/level/par");
                foreach (XmlNode xn in xnList)
                {
                    if (xn.OuterXml.Contains("gtin"))
                    {
                        gtin = xn.InnerText;
                    }
                    if (xn.OuterXml.Contains("levelQty"))
                    {
                        levelQty = xn.InnerText;
                    }
                    if (xn.OuterXml.Contains("sgtinSerial"))
                    {
                        //sgtinSerial = xn.InnerText;
                    }

                }

                xnList = xml.SelectNodes("/order/level/par/el");
                foreach (XmlNode xn in xnList)
                {
                    sgtinSerial.Add(xn.InnerText);
                }

                xmlF.ppo = ppo;
                xmlF.gtin = gtin;
                xmlF.lotNumber = lotNumber;
                xmlF.expirationDate = expirationDate;
                xmlF.productionDate = productionDate;
                xmlF.countSN = levelQty;
                xmlF.sgtinSerial = sgtinSerial;
            }
            catch (Exception ex)
            {
                string e = ex.Message;
            }
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5963
Herkunft: Leipzig

beantworten | zitieren | melden

Also wenn du dich so komplett weigerst, mal in die Doku zu schauen, wird das auf Dauer nichts.

Wenn ein Fehler oder unerklärliches Verhalten auftritt, ist die Doku der erste Anlaufpunkt. Dann hättest du auch gesehen, daß die XmlDocument.LoadXml-Methode keinen Pfad erwartet, sondern XML.

Und daß es mehrere Beispiele in der Doku gibt, wie man XML-Dateien auslesen kann.

Bitte beachte [Hinweis] Wie poste ich richtig?, besonders Punkt 1.
Und: [Tipp] Schau in die Doku! - Möglichkeiten der Informationsgewinnung
Weeks of programming can save you hours of planning
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15702
Herkunft: BW

beantworten | zitieren | melden

Zitat
das wären sinnvolle hilfen gewesen

..bei solchen Aussagen brauchst Du Dich nicht wundern, wenn Du in Zukunft keine Hilfe mehr bekommst - zurecht.
Du hast mit den Fragezeichen nach dem XPath gefragt; kommst nun aber mit was völlig anderem, mit den Load um die Ecke. Zwei Dinge, die nichts, aber auch wirklich gar nichts miteinander zutun haben.

Die Leute hier verwenden ihre Freizeit um Dir zu helfen. Wenn dann doofe (oder dumme) Sprüche kommen, dann biste einfach falsch am Platz.

Ansonsten hast Du evtl ein Forum, das eine Hilfestellung bietet, mit einem Code-Hiwi verwechselt, der Dir auf Zuruf den Code fixt.

Viel Erfolg!
private Nachricht | Beiträge des Benutzers
Kaladial
myCSharp.de - Member



Dabei seit:
Beiträge: 50

Themenstarter:

beantworten | zitieren | melden

Zitat von Kaladial
aber wie les ich das aus ?

ich hatte überlegt das mit der variante zu machen:


            XmlDocument xml = new XmlDocument();
            xml.LoadXml(xml_filemname); 

            XmlNodeList xnList = xml.SelectNodes("???");
            foreach (XmlNode xn in xnList)
            {
                string ppo = xn["ppo"].InnerText;
            }

aber was muss ich da bei ??? eingaben?
mal davon abgesehn das das auch nicht ging

xml.LoadXml(xml_filemname); schmeisst ne exception
{"Ungültige Daten auf Stammebene. Zeile 1, Position 1."}

da stehen doch wohl 2 fragen drin...
private Nachricht | Beiträge des Benutzers
SimpleTool
myCSharp.de - Member

Avatar #avatar-4145.png


Dabei seit:
Beiträge: 12

beantworten | zitieren | melden

Hi,
Zitat
aber was muss ich da bei ??? eingaben?

XmlNodeList nodes = xDoc.SelectNodes("//element[@name='value1']");

Das im "" ist also eben der XPath Befehl wo man jetzt das Dokument nach Knotenname "element" durchsucht das den Attribut "name" hat mit dem Wert "value1".

Da ich nicht weiß was du genau für Elemente suchst wären hier Beispiele zu XPath bei dem verschiedenes durchgespielt wird. Ich denk das du dann den Inhalt für ??? findest.
Beispiele XPath
Bzw. "." XPath-Erklärung für "ab dem Knoten suchen"
private Nachricht | Beiträge des Benutzers