Autor Beitrag
AeroX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 68



BeitragVerfasst: So 02.03.08 22:58 
ich versuche es jetzt schon seit 2 oder 3 stunden!
diese verdammten XML-Dateien!

also, ich möchte gerne eine liste von den attributen und dem inhalt machen!

ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
<?xml version="1.0" encoding="utf-8"?>
<Termine>
  <Termin id="08.05.2008">
    <child time="12:00">Das ist der erste Termin!</child>
    <child time="14:00">Das ist der zweite Termin!</child>
  </Termin>
</Termine>


das programm sollte jetzt nach der id suchen,
und dann jeden child auflisten!
also so:

Das ist der erste Termin! 12:00
Das ist der zweite Termin! 14:00

Moderiert von user profile iconChristian S.: Code- durch XML-Tags ersetzt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 02.03.08 22:59 
Wenn Du es schon Stunden versuchst, hast Du doch bestimmt einen Ansatz, mit dem man arbeiten kann. Also zeig mal her :-)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
AeroX Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 68



BeitragVerfasst: So 02.03.08 23:10 
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
XmlDocument doc = new XmlDocument();
doc.Load("Config.xml");
XmlElement document = doc.DocumentElement;
XmlElement XMLTermin = doc.GetElementById("08.05.2008");
foreach (XmlNode @daten in XMLTermin.ChildNodes)
{
  listBox1.Items.Add(@daten.InnerText);
  listBox2.Items.Add(@daten.Attributes["time"]);
}


Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 02.03.08 23:23 
Hallo!

GetElementById dürfte nur dann funktionieren, wenn in der XML-Datei auch ein Attribut als ID festgelegt wurde. (Siehe Doku zu GetElementById-Methode, da steht's erklärt). Der Name reicht dafür wohl nicht.

Ich arbeite kaum mit dem XML-Klassen, weil ich immer nur über den XMLSerializer ganze Instanzen von Klassen lese, aber der direkteste Weg dürfte sein, selber die Kind-Knoten durchzulaufen und zu schauen, bei wem das Attribut richtig ist.

Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
AeroX Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 68



BeitragVerfasst: Mo 03.03.08 14:57 
Also bei mir steht, das eine Objektinstanz fehlt in der Zeile,
wo foreach steht!

was soll ich tun?
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 03.03.08 15:00 
user profile iconAeroX hat folgendes geschrieben:
was soll ich tun?
Lese, was ich geschrieben habe.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
AeroX Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 68



BeitragVerfasst: Mo 03.03.08 15:24 
Wo is denn diese Doku?
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 03.03.08 15:39 
user profile iconAeroX hat folgendes geschrieben:
Wo is denn diese Doku?

Cursor auf GetElementById => user defined image ;) .

Für einen Anfänger vielleicht nicht gerade geeignet, aber hier noch zwei andere Wege, die mir gerade einfallen. Manchmal ist es wirklich schrecklich mit dem Framework, da sind selbst die Wege nach Rom noch übersichtlicher :mrgreen: .
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
// 1. XPath
      var doc = new XPathDocument("File.xml");
      foreach (XPathNavigator navigator in doc.CreateNavigator().Select("/Termine/Termin[@id=\"08.05.2008\"]/child"))
        Console.WriteLine(navigator.InnerXml + navigator.GetAttribute("time"""));

      // 2. Linq To XML
      // => NUR 3.5
      foreach (var child in
        XElement.Load("File.xml")
          .Elements("Termin")
          .Single(termin => termin.Attribute("id").Value == "08.05.2008")
          .Elements("child"))
        Console.WriteLine(child.Value + child.Attribute("time").Value);
AeroX Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 68



BeitragVerfasst: Mo 03.03.08 17:10 
danke dir für die anderen Varianten!

ich habe jtzt ein Code, aber thoretisch darf er das element doch garnicht finden!
oder?

ausblenden C#-Quelltext
1:
2:
3:
var doc = new System.Xml.XPath.XPathDocument("Config.xml");
System.Xml.XPath.XPathNodeIterator navigator = doc.CreateNavigator().Select("/Termine/Termin[@id=\"NICHT_DAS_DATUM\"]/child");
MessageBox.Show(navigator.Current.ToString());


Es kommt jetzt trotzdem dem der Inhalt!
(man achte auf die ID!)

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 03.03.08 21:25 
Wenn ich das in der Doku richtig lese, musst Du nach dem Aufruf von Select bei dem zurückgegebenen Iterator erst einmal MoveNext() aufrufen und schauen, ob das Ergebnis true ist. Falls ja, kannst Du Current auswerten. Rufst Du MoveNext() nicht auf, wird Current mutmaßlich auf den ersten Datensatz zeigen, egal ob der passt oder nicht.

Aber vorischt: Ich hab's nicht ausprobiert, aber die Beispiele in der Doku lassen mich das vermuten.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
AeroX Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 68



BeitragVerfasst: Mo 03.03.08 23:31 
Jo,
hat geklappt!

nun habe ich aber das problem,
dass die foreach-schleife nicht mehr funzt!

hier mal der gesamte Code:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
            try
            {
                var doc = new System.Xml.XPath.XPathDocument("Config.xml");
                System.Xml.XPath.XPathNodeIterator navigator = doc.CreateNavigator().Select("/Termine/Termin[@id=\"08.05.2008\"]/child");
                if (navigator.MoveNext())
                {
                    foreach (System.Xml.XPath.XPathNavigator navi in navigator)
                    {
                        MessageBox.Show(navi.InnerXml + navi.GetAttribute("time"""));
                    }
                }
                else
                {
                    MessageBox.Show("Noch kein Eintrag!");
                }
            }
            catch (Exception error)
            {
                MessageBox.Show("Fehler aufgetreten:\n\n" + error.ToString());
            }


Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 04.03.08 14:46 
Wenn du foreach benutzt, ist MoveNext natürlich fehl am Platze - wie in meinem Beispiel oben hoffentlich erkenntlich ;P .
AeroX Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 68



BeitragVerfasst: Di 04.03.08 16:53 
und wie soll ich das jetzt machen?
AeroX Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 68



BeitragVerfasst: Di 04.03.08 19:50 
ok, ich habs jetzt gelöst!

hier nochmal für alle die das gleiche Problem haben:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
            try
            {
                var doc = new System.Xml.XPath.XPathDocument("Config.xml");
                System.Xml.XPath.XPathNodeIterator navigator = doc.CreateNavigator().Select("/Termine/Termin[@id=\"08.05.2008\"]/child");
                string[] XmlTermins = new string[10];
                string[] XmlTimes = new string[10];
                int i = 0;
                while (navigator.MoveNext())
                {
                    XmlTermins[i] = navigator.Current.Value;
                    XmlTimes[i] = navigator.Current.GetAttribute("time","");
                    i++;
                }
                if (XmlTermins.Length != XmlTimes.Length)
                    MessageBox.Show("Daten stimmen nicht überein!");
                if (i == 0)
                {
                    listBox1.Items.Add("Keine Termine Vorhanden!");
                }
                else
                {
                    for (int fi = 0; fi < i ; fi++ )
                    {
                        listBox1.Items.Add(XmlTermins[fi]);
                        listBox2.Items.Add(XmlTimes[fi]);
                    }
                }

            }
            catch (Exception error)
            {
                MessageBox.Show("Fehler aufgetreten:\n\n" + error.ToString());
            }


Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt
US_Navy
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Fr 08.01.10 19:48 
Hallo,

Ich bräuchte mal eure Hilfe, und zwar möchte ich gerne dieses XML auslesen, kriege es aber leider nicht hin.

ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
<?xml version="1.0" encoding="utf-8"?>  
<movies>  
  <id movie shown="false">  
    <id moviedb="allocine">"387892"</id>
    <id moviedb="filmweb">"387892"</id>
    <filenameandpath></filenameandpath
    <trailer></trailer>            
    <genre></genre>                 
    <credits></credits>
  </id movie>  
</movies>

Hier möchte ich nur die beiden Zeilen <id moviedb> auslesen. Beide Zeilen sollten in einer Datenbank in ein Seperates Feld geschrieben werden. (Diese Anbingung habe ich schon). Nur eben das auslesen bekomme ich nicht hin.

Grüße Oliver
US_Navy
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Sa 09.01.10 11:45 
Habe das Problem nun doch noch lösen können!

user profile iconUS_Navy hat folgendes geschrieben Zum zitierten Posting springen:
Hallo,

Ich bräuchte mal eure Hilfe, und zwar möchte ich gerne dieses XML auslesen, kriege es aber leider nicht hin.

ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
<?xml version="1.0" encoding="utf-8"?>  
<movies>  
  <id movie shown="false">  
    <id moviedb="allocine">"387892"</id>
    <id moviedb="filmweb">"387892"</id>
    <filenameandpath></filenameandpath
    <trailer></trailer>            
    <genre></genre>                 
    <credits></credits>
  </id movie>  
</movies>

Hier möchte ich nur die beiden Zeilen <id moviedb> auslesen. Beide Zeilen sollten in einer Datenbank in ein Seperates Feld geschrieben werden. (Diese Anbingung habe ich schon). Nur eben das auslesen bekomme ich nicht hin.

Grüße Oliver
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Sa 09.01.10 12:11 
user profile iconUS_Navy hat folgendes geschrieben Zum zitierten Posting springen:
Habe das Problem nun doch noch lösen können!

Statt dass du deine Frage kopierst und vollständig zitierst, sodass sie zweimal hintereinander steht, wäre es für andere Forumsnutzer erheblich hilfreicher, wenn du deine Lösung angeben würdest. Ist es so schwierig, an andere Leser zu denken? Jürgen