Benutzer mit den meisten Antworten
XML Datei auslesen und in Variablen speichern

Frage
-
Hallo, ich möchte aus einer gegeben XML Datei einzelene Elemente auslesen und in verschiedene Variablen setzen:
string xmlstring = @" <questions> <row> <id>1</id> <question>Welchen Tag haben wir heute?</question> <answers> <answer result="true">Montag</answer> <answer result="false">Dienstag</answer> <answer result="false">Bla</answer> <answer result="false">Bummm</answer> </answers> </row> <row> <id>2</id> <question>Zweiter Tag?</question> <answers> <answer result="false">Montag</answer> <answer result="true">Dienstag</answer> <answer result="false">Bla</answer> <answer result="false">Bummm</answer> </answers> </row> </questions> "; private void Work() { var query = from c in doc.Descendants("row") where c.Element("ID").Value == "2" select c; query.Single(); }
Soweit so gut, im query.Single() (ob ich das richtig anwende?) habe ich die kompletten Einträge was in der ID = 2 vorhanden sind. Wie zerlege ich das am besten?
Ich möchte z.B. den Inhalt zwischen den Tags <Question></Question> in eine String variable speichern. Die "answers" sollten auch in je eine String variable. Die false/true benötige ich intern für weitere Dinge, sollten also irgendwie verknüpft bleiben. Falls das nicht so möglich wäre, würde ich einen index hinzufügen, welche mir anzeigt, welches die korrekte Antwort ist.
Bin über jede Hilfe dankbar.
- Bearbeitet as_1985 Samstag, 18. Februar 2012 15:52
Antworten
-
Definiere entweder eine Klasse mit den Eigenschaften oder benutze wie im folgenden Beispiel anonyme Typen, die der Compiler erzeugt:
string xmlstring = @" <questions> <row> <id>1</id> <question>Welchen Tag haben wir heute?</question> <answers> <answer result=""true"">Montag</answer> <answer result=""false"">Dienstag</answer> <answer result=""false"">Bla</answer> <answer result=""false"">Bummm</answer> </answers> </row> <row> <id>2</id> <question>Zweiter Tag?</question> <answers> <answer result=""false"">Montag</answer> <answer result=""true"">Dienstag</answer> <answer result=""false"">Bla</answer> <answer result=""false"">Bummm</answer> </answers> </row> </questions> "; int id = 2; var question = (from row in XDocument.Parse(xmlstring).Descendants("row") where (int)row.Element("id") == id select new { id = (int)row.Element("id"), q = (string)row.Element("question"), answers = from answer in row.Element("answers").Elements("answer") select new { result = (bool)answer.Attribute("result"), frase = (string)answer } }).FirstOrDefault(); if (question != null) { Console.WriteLine("Frage mit id {0} ist \"{1}\".", question.id, question.q); Console.WriteLine("Mögliche Antworten sind:"); foreach (var answer in question.answers) { Console.WriteLine("{0}: {1}", answer.frase, answer.result); } }
MVP Data Platform Development My blog
- Als Antwort vorgeschlagen Elmar BoyeEditor Samstag, 18. Februar 2012 17:00
- Als Antwort markiert as_1985 Sonntag, 19. Februar 2012 12:08
-
Hier ist ein Beispiel für das Maximum:
int maxId = XDocument.Parse(xmlstring).Descendants("row").Max(r => (int)r.Element("id"));
Zählen kannst du mit LINQ natürlich auch
int count = XDocument.Parse(xmlstring).Descendants("row").Count();
MVP Data Platform Development My blog
- Als Antwort markiert as_1985 Sonntag, 19. Februar 2012 12:08
Alle Antworten
-
Definiere entweder eine Klasse mit den Eigenschaften oder benutze wie im folgenden Beispiel anonyme Typen, die der Compiler erzeugt:
string xmlstring = @" <questions> <row> <id>1</id> <question>Welchen Tag haben wir heute?</question> <answers> <answer result=""true"">Montag</answer> <answer result=""false"">Dienstag</answer> <answer result=""false"">Bla</answer> <answer result=""false"">Bummm</answer> </answers> </row> <row> <id>2</id> <question>Zweiter Tag?</question> <answers> <answer result=""false"">Montag</answer> <answer result=""true"">Dienstag</answer> <answer result=""false"">Bla</answer> <answer result=""false"">Bummm</answer> </answers> </row> </questions> "; int id = 2; var question = (from row in XDocument.Parse(xmlstring).Descendants("row") where (int)row.Element("id") == id select new { id = (int)row.Element("id"), q = (string)row.Element("question"), answers = from answer in row.Element("answers").Elements("answer") select new { result = (bool)answer.Attribute("result"), frase = (string)answer } }).FirstOrDefault(); if (question != null) { Console.WriteLine("Frage mit id {0} ist \"{1}\".", question.id, question.q); Console.WriteLine("Mögliche Antworten sind:"); foreach (var answer in question.answers) { Console.WriteLine("{0}: {1}", answer.frase, answer.result); } }
MVP Data Platform Development My blog
- Als Antwort vorgeschlagen Elmar BoyeEditor Samstag, 18. Februar 2012 17:00
- Als Antwort markiert as_1985 Sonntag, 19. Februar 2012 12:08
-
Hier ist ein Beispiel für das Maximum:
int maxId = XDocument.Parse(xmlstring).Descendants("row").Max(r => (int)r.Element("id"));
Zählen kannst du mit LINQ natürlich auch
int count = XDocument.Parse(xmlstring).Descendants("row").Count();
MVP Data Platform Development My blog
- Als Antwort markiert as_1985 Sonntag, 19. Februar 2012 12:08