Autor Beitrag
Chiyoko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 298
Erhaltene Danke: 8

Win 98, Win Xp, Win 10
C# / C (VS 2019)
BeitragVerfasst: Mo 30.05.11 14:48 
Huhu,

ich hatte ein ähnliches Problem schon einmal aber ich sollte einen neuen thread eröffnen.
2 XML Dateien hab ich über Klassen Wrapper geloest, die habe ich allerdings auch umschreiben müssen und der Datensatz war nicht alzu gross.
Diese folgende Datei hat weit ueber 1800 zeilen, das ist zuviel.

Nun, ich schaff es nicht, mit LINQ alle Datensätze auszulesen, wenn "nur" ein Childknoten aus einem Childknoten besteht.

Hier etwas Code zur Übersicht:

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:
34:
35:
 private void combobox_searchfrage_de(object sender, EventArgs e)
        {
            ListViewItem item = new ListViewItem();
            Listview.Items.Clear();
            Listview.Columns.Clear();
            Listview.Columns.Add("Index"20, HorizontalAlignment.Left);
            Listview.Columns.Add("Heft"30, HorizontalAlignment.Left);
            Listview.Columns.Add("Fragen"200, HorizontalAlignment.Left);

            XDocument doc = XDocument.Load("fragen_de.xml");
            var fragen =
                from Gliederung_de in doc.Descendants("Gliederung_de")
                select new
                {
                    HEFT_theme = (string)Gliederung_de.Attribute("name").Value,
                    HEFT_id = (string)Gliederung_de.Element("HEFT").Attribute("ID").Value,
                    HEFT_name = (string)Gliederung_de.Element("HEFT").Value
                };
        
            if (File.Exists("fragen_de.xml"))
            {
                foreach (var root in fragen )
                {
                    if (sender == combo_spezial)
                    {
                        if (combo_spezial.SelectedIndex == 0)
                        {
                            item = Listview.Items.Add(root.HEFT_theme);
                            item.SubItems.Add(root.HEFT_id);
                            item.SubItems.Add(root.HEFT_name);
                        }
                    }
                }
            }
        }

ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
<?xml version="1.0" encoding="utf-8" ?>

<HEFT_frage>
  <Deutsch>
    <Frage>
      <Gliederung_de name ="A">
        <HEFT ID ="24">Hier ist Frage 1</HEFT>
        <HEFT ID ="47">Hier ist Frage 2</HEFT>
        <HEFT ID ="52">Hier ist Frage 3</HEFT>
      </Gliederung_de>
      <Gliederung_de name ="B">
        <HEFT ID ="24">Hier ist Frage 4</HEFT>
        <HEFT ID ="47">Hier ist Frage 5</HEFT>
        <HEFT ID ="52">Hier ist Frage 6</HEFT>
      </Gliederung_de>
    </Frage>
  </Deutsch>
</HEFT_frage>


Ich brauche erstmal alle Inhalte von "Gliederung_de", nicht nur 1.
Bisher wird mir aus der foreach Iteration nur 1 angezeigt.
(Die XML Datei moechte ich nicht aendern)
Bitte um Rat.


Zuletzt bearbeitet von Chiyoko am Sa 04.06.11 14:38, insgesamt 1-mal bearbeitet
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 30.05.11 17:15 
Das kann ich mir fast nicht vorstellen :gruebel: . Hast du dir schon einmal doc.Descendants("Gliederung_de") allein im Debugger ausgeben lassen?

_________________
>λ=
Chiyoko Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 298
Erhaltene Danke: 8

Win 98, Win Xp, Win 10
C# / C (VS 2019)
BeitragVerfasst: Mo 30.05.11 19:35 
Jap, da wird im Root alles angezeigt.
Chiyoko Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 298
Erhaltene Danke: 8

Win 98, Win Xp, Win 10
C# / C (VS 2019)
BeitragVerfasst: Fr 03.06.11 14:37 
Ich habe mein problem gelöst, das ist ja ein Akt:D
Der XML habe ich erstmal zwangsweise doch ein weiteren Knoten zwischen gefügt.
Allerdings gab das immer eine NullReferenzeEx.

Am Ende habe ich es so gelöst:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
        private void button1_Click(object sender, EventArgs e)
        {
            this.listview.Items.Clear();

            XDocument doc = XDocument.Load(Path.Combine(Application.StartupPath, ("fragen_de.xml")));
            var fragen_de = doc.XPathSelectElements("//fragen");

            foreach (var fragenelement in fragen_de)
            {
                string indexer = fragenelement.Parent.Attribute("name").Value;
                string inhalt = fragenelement.Element("inhalt").Value;
                string id = fragenelement.Element("inhalt").Attribute("ID").Value;
               
                ListViewItem item1 = new ListViewItem();
                item1 = this.listview.Items.Add(indexer);
                item1.SubItems.Add(id);
                item1.SubItems.Add(inhalt);
            }
        }


Damit tat sich allerdings ein neues problem auf, wenn ich diese 900 Fragen auslesen lasse
und diesen dann Gruppen zuweise, dauert es i.d.R. knappe 20 Sekunden, ehe diese zugewiesen wurden.
(Ohne in einem bruchteil von sekunden)

Ist das normal?
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: So 05.06.11 10:10 
Hi,
user profile iconChiyoko hat folgendes geschrieben Zum zitierten Posting springen:
Der XML habe ich erstmal zwangsweise doch ein weiteren Knoten zwischen gefügt.
Allerdings gab das immer eine NullReferenzeEx.
Naja, der Code muss schon zu der XML passen. Wenn man Elemente oder Attribute abruft, die nicht existieren, kann schonmal was null sein.
user profile iconChiyoko hat folgendes geschrieben Zum zitierten Posting springen:
wenn ich diese 900 Fragen auslesen lasse und diesen dann Gruppen zuweise, dauert es i.d.R. knappe 20 Sekunden, ehe diese zugewiesen wurden.
Gute Frage, was daran so lange dauern kann, 900 Fragen aus einer XML auszulesen und dann in der Listview anzuzeigen. Ich meine, 20 Sekunden! Und das für die Ausführung des Codes, den Du gepostet hast?

An der Abfrage der Informationen aus der XML kann es ja (eigentlich) nicht liegen. Obwohl ich nicht so richtig verstehe, wozu dort irgendwas mit einem XPath drin ist!? Kann es sein, dass es allein beim Hinzufügen der Items zu der ListView hängt?

Dein neues Schema sieht so in etwa aus?
ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
<gruppe name ="A">
  <fragen>
    <inhalt ID ="24">Hier ist Frage 1</inhalt>
  </fragen>
  <fragen>
    <inhalt ID ="25">Hier ist Frage 2</inhalt>
  </fragen>
</gruppe>
Wozu das Element "fragen", in dem Sich (laut Abfrage) eh nur eine Frage (bzw. ein Inhalt) befinden kann?
LG