Laden...

C# und XML-Daten auslesen

Erstellt von voodoo44 vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.554 Views
V
voodoo44 Themenstarter:in
82 Beiträge seit 2008
vor 13 Jahren
C# und XML-Daten auslesen

verwendetes Datenbanksystem: XML

Hallo Leute,

ich habe mir hier einen XML-Webservice zusammengebastelt, der mir immer die angeforderten Daten aus der DB via XML darstellt.

Soweit so gut, doch nun folgendes: Wie genau bekomme ich jetzt den XML-Content in C# ausgelesen?

Folgende XML-Struktur will ich auswerten:

<schedule>
<node>
<schedID>1</schedID>
<schedDesc>Hier folgt Text 1</schedDesc>
<schedWeek>1</schedWeek>
<schedHour>0</schedHour>
</node>
<node>
<schedID>2</schedID>
<schedDesc>Hier folgt Text 2</schedDesc>
<schedWeek>1</schedWeek>
<schedHour>2</schedHour>
</node>
<node>
<schedID>3</schedID>
<schedDesc>Hier folgt Text 3</schedDesc>
<schedWeek>1</schedWeek>
<schedHour>5</schedHour>
</node>
</schedule>

Wichtig ist, dass dieser XML-Code von einem String gelesen wird (hierzu habe ich schon glaube ich eine Lösung gefunden - kann sie allerdings nicht verifizieren, da ich eben nicht an das XML rankomme).

Wie genau spreche ich nun die einzelnen Elemente jeweils an und bekomme hier (will es später in einem Label, einer Tabelle oder was auch immer darstellen) meine Nodes auf dem Bildschirm ausgegeben?
Wäre es sinnvoll, die schedID evtl. dem "node" mitzugeben, um diese voneinander unterscheiden zu können?
Oder existiert hier eine Möglichkeit, jeden Node nacheinander zu durchlaufen und den Inhalt mir z.B. in ein String-Array zu speichern?

Wenn ja, wie mache ich das?

268 Beiträge seit 2008
vor 13 Jahren

Schonmal mit Serialisation probiert?
Klick mich
Damit bekommst du aus einem XML ein Objekt.

Name: Scarecraft
Language:C#
learning since:winter 2007
IDE: Visual Studio 2005/08 Professional Editon
Skill:Medium
qualifications: MCP - Microsoft Certified Professional
Homepage : FX RPG Maker

Gelöschter Account
vor 13 Jahren

Wie genau bekomme ich jetzt den XML-Content in C# ausgelesen?

siehe auch XmlDocument, XmlReader

bitte beachte [Hinweis] Wie poste ich richtig? 1.1

M
14 Beiträge seit 2010
vor 13 Jahren


namespace MSD_PersDatabase_02.logic
{
    public class DataLoader
    {
        public DataLoader()
        {
            WebClient dataService = new WebClient();
            dataService.DownloadStringCompleted += new DownloadStringCompletedEventHandler(dataService_DownloadStringCompleted);
            dataService.DownloadStringAsync(new Uri("http://localhost:3172/web/data/data2.xml"));
            
        }

        void dataService_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            try
            {
                LoadetEventArgs args = new LoadetEventArgs
                {
                 
                    Data = XDocument.Parse(e.Result)
                };
                DataLoaded(this, args);
            }

            catch
            {
                throw;
            }
        }
        
        public delegate void LoadetEventHandler(object sender, LoadetEventArgs args);
        public event LoadetEventHandler DataLoaded;
    }

    public class LoadetEventArgs : EventArgs
    {
        public XDocument Data { get; set; }
    }
}


in "Data" liegt deine XML File, in einen String

MFG
Stefan

3.971 Beiträge seit 2006
vor 13 Jahren

Weitere Möglichkeiten: XPath oder auch über ein DataSet

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

V
voodoo44 Themenstarter:in
82 Beiträge seit 2008
vor 13 Jahren

Gibt es denn keine simple Möglichkeit, den XML-Code in ein mehrdimensionales Array zu packen?

So ganz schlau bin ich aus den bisherigen Antworten leider nicht geworden, da ich das zuvor auch schon via Google gefunden hatte.

Es kann doch nicht so schwer sein, wie ich mich hier gerade tue ... argh

Hat niemand 'ne Lösung, wie ich die Elemente am einfachsten in ein Array packe?
2-Dimensional sollte ja schon ausreichen - auch wenn es nicht dynamisch sondern hardcoded ist.

Gelöschter Account
vor 13 Jahren

Gibt es denn keine simple Möglichkeit,

simpler als das bereits gepostete (=maximal 2 zeilen quellcode) geht es nicht.

Es kann doch nicht so schwer sein, wie ich mich hier gerade tue ... argh

das liegt dann wohl an dir 😉
es ist nicht so schwer, wie du es empfindest.

Hat niemand 'ne Lösung, wie ich die Elemente am einfachsten in ein Array packe?
2-Dimensional sollte ja schon ausreichen - auch wenn es nicht dynamisch sondern hardcoded ist.

das ist hässlich, unkomfortabel und unnötig.
zudem treffen wir jetzt -> [Hinweis] Wie poste ich richtig? 1.1
wie man ein array initialisiert setzen wir hier als bekannt vorraus.

V
voodoo44 Themenstarter:in
82 Beiträge seit 2008
vor 13 Jahren

Das mit dem Array initialisieren bekomme ich schon hin 😉

Mir geht es speziell darum, wie ich die Daten jetzt in das Array hinein pressen kann um sie später weiterverarbeiten zu können. Es soll schlussendlich nämlich eine Maske daraus entstehen - die will ich entweder dynamisch (foreach-Schleife soll das 2D-Array durchlaufen und auch die passenden Labels anlegen) durchlaufen oder irgendwie in eine Tabelle packen.

Wie evtl. unschwer erkennbar ist, soll ne Art Stundenplan (allerdings Tageweise, da so ein PDA-Screen sehr klein ist für ne ganze Woche) herauskommen.

Ich hab mittlerweile was zusammengefrickelt, ABER:
Gibt es was eleganteres als das hier? bzw. - ja, das gibt es - aber wie würde es aussehen? 😉

             String[,] sched = new String[10,10];
             int i = -1;
             int j = 0;

             while (reader.Read()) 
             {
                 reader.MoveToContent();
                 if (reader.Name == "node")
                 {
                     j = 0;
                     i++;
                 }
                 if (reader.NodeType == XmlNodeType.Text)
                 {
                     sched[i, j] = reader.Value.ToString();
                     j++;
                 }
             }
             reader.Close();


             for (int a = 0; a < 10; a++)
             {
                 label1.Text += sched[a, 2] + "\n";
                 label1.Text += sched[a, 3] + "\n";
             }
49.485 Beiträge seit 2005
vor 13 Jahren

Hallo voodoo44,

bitte strapaziere unsere Hilfe nicht über, du hast doch schon alles, was du brauchst. Und beachte bitte [Hinweis] Wie poste ich richtig? worauf du jetzt schon zweimal hingewiesen worden bist.

herbivore