Laden...

XML mehrere Knoten gezielt auslesen

Erstellt von timmi0701 vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.114 Views
T
timmi0701 Themenstarter:in
1 Beiträge seit 2019
vor 4 Jahren
XML mehrere Knoten gezielt auslesen

Hallo, ich habe hier schon einige Beiträge durchgeschaut
und probiert, komme aber nicht zum gewünschten ergebnis

Ich bin ziemlich neu in dem Gebiet XML

Das ist meine XML Datei


<users>
  <user0>
    <name>MARY</name>
    <time>03:23:23</time>
  </user0>
  <user1>
    <name>BETTY</name>
    <time>04:54:10</time>
  </user1>
  <user2>
    <name>GEORG</name>
    <time>02:59:22</time>
  </user2>
  <user3>
    <name>BRIAN</name>
    <time>02:59:11</time>
  </user3>
  <user4>
    <name>JASON</name>
    <time>04:33:45</time>
  </user4>
  <user5>
    <name>GARY</name>
    <time>04:10:01</time>
  </user5>
  <user6>
    <name>DAVID</name>
    <time>03:24:32</time>
  </user6>
  <user7>
    <name>ANN</name>
    <time>02:39:05</time>
  </user7>
  <user8>
    <name>ROSE</name>
    <time>02:55:55</time>
  </user8>
  <user9>
    <name>ADAM</name>
    <time>04:00:01</time>
  </user9>
</users>

und da möchte ich gern den Namen und die Zeit herauslesen
und dies als String speichern


string filename = "UserTime.xml";
XmlDocument xml = new XmlDocument();
        xml.Load(filename);

        XmlNodeList Catalog = xml.GetElementsByTagName("users");

        foreach (XmlElement cdelem in Catalog)
        {
            if (i < 10)
            {
                XmlNodeList cd = cdelem.GetElementsByTagName("user" + i);
                
                foreach (XmlElement details in cd)
                {
                    string title = details.GetElementsByTagName("name")[0].InnerText;
                    string t = details.GetElementsByTagName("time")[0].InnerText;
                    Debug.Log(title);
                    
                }
                i++;
            }
            
        }

ich bekomme aber nur den ersten Wert angezeigt 🙁

Ich weiß echt nicht mehr weiter
Bitte helft mir :rtfm: 🤔

16.806 Beiträge seit 2008
vor 4 Jahren

Du kannst entweder mit XmlElement und und einem XQuery drauf zugreifen; oder eben via DOM und der XElement/XDocument Klasse.

In diesem Fall ist XDocument für Anfänger intuitiver:
Lade Dir die XML in ein XDocument, schau Dir das Root-Property an und hangle Dich dann mit dem Debugger durch das XML.
[Artikel] Debugger: Wie verwende ich den von Visual Studio?

Die Verarbeitung von XML ist die mit am besten vorhandene Doku des .NET Universums.
Ich bin sicher, dass Du eine geeignete Doku/Tutorial findest, wenn Du danach googlest 😉
zB XDocument.Load Method

1.029 Beiträge seit 2010
vor 4 Jahren

Hi,

wer hat denn das XML verbrochen? Ich hoffe nicht du?

Normalerweise sollte da nämlich nicht

<user0></user0>

sondern eher etwas Richtung

<user id="0">...</user>

stehen - das vereinfacht die Verarbeitung nämlich um ein vielfaches...
(Hier könntest du dann nämlich XPATH oder sogar Deserialisierung anwenden...)

Als Beispiel wenn das XML so bleiben sollte:


static void Main(string[] args)
        {
            string xml = "<users><user0><name>MARY</name><time>03:23:23</time></user0><user1><name>BETTY</name><time>04:54:10</time></user1></users>";
            XElement xelem = XElement.Parse(xml);
            var users = xelem.Elements(); // holt die direkt untergeordneten Elemente von "users"
            foreach(var userEntry in users)
                Console.WriteLine(userEntry.Element("name").Value);
            Console.ReadLine();
        }

LG