Entwickler-Ecke
IO, XML und Registry - xml auslesen
schickmaster - Mo 06.02.12 11:53
Titel: xml auslesen
hi,
ich habe folgendes XML file
XML-Daten
1: 2: 3: 4: 5: 6: 7: 8: 9:
| <test_db> <test> <indexnr>2</indexnr> <text>so jung kommen wir nimmer zusammen</text> <tags>jung</tags> <tags>anstoßen</tags> </test> </test_db> |
und will es auf <tags> gesucht auslesen, was auch soweit funktioniert, nur das ich nur auf dem ersten Tag matchen kann
der code ist wie folgt:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| XElement root = XElement.Load("C:\\...fpad..."); IEnumerable<XElement> test_db = from el in root.Elements("test") where (string)el.Element("tags") == "jung" select el; foreach (XElement el in test_db) Console.WriteLine((string)el.Element("text")); } |
ich bekomme den text nur ausgegeben, wenn der code auf den ersten tag matched, auf den zweiten funktioniert es leider nicht.
gibt es hier eine möglichkeit nach allen tags zu matchen, sodass ich bei vergleich mit "jung" und "anstoßen" beide mal den text "so jung kommen wir nimmer zusammen"
ausgegeben bekomme(spruch nur zu testen;D) bin leider grade am verzweifeln, kann doch so wild nicht sein.
für hilfe sehr dankbar.
lg alex
Moderiert von
Th69: Topic aus WinForms verschoben am Mo 06.02.2012 um 11:18
schickmaster - Do 09.02.12 16:21
Hi Th69,
danke für die Antwort.
versuche jetzt schon länger die Contains Methode zum laufen zubekommen. Bei einer normalen Liste geht es auch.
Deinen Vorschlag habe ich versuch so umzusetzen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| XElement doc = XElement.Load(xmlpath); IEnumerable<XElement> test_db = from el in doc.Elements("test") where el.Elements("tag").Contains(, "suchwort") == true select el;
foreach (XElement el in test_db) Console.WriteLine((string)el.Element("text")); |
Bei Contains(x,y) verlangt er noch einen ersten Wert, bekomme es ber nicht zum laufen und für in der where klausel bekommen ich den Fehler "Delegat "System.Func<System.Xml.Linq.XElement,int,bool>" nimmt keine 1-Argumente an." ODer muss ich vorher eigens eine Liste definieren auf die ich dann Contains anwenden dann? Bei normalen Listen funktioniert Contains auch ohne Probleme, nur scheint es sich mit "where" nicht zu verstehen.
Gruss Alexander
Th69 - Do 09.02.12 17:58
Hallo,
probiere mal
C#-Quelltext
1:
| where el.Elements("tags").Any(x => x.Value == "suchwort") |
(Contains geht hier ja nicht, da XElement nicht direkt mit einem String verglichen werden kann).
schickmaster - Mo 13.02.12 11:34
Hi Th69,
vielen Dank für die Hilfe, so hat es funktioniert. Komisch, dass ich beim googlen nicht auf Any gestoßen bin.
Lg Alex
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!