Benutzer mit den meisten Antworten
XML per LINQ anfragen

Frage
-
Hallo Forum,
ich versuche folgende XML Struktur per LINQ anzufragen, bekomme aber immer Null raus.
<?xml version="1.0" encoding="utf-8" standalone="yes"?> <TranslateModuls> <Class ClassName="Invention" CultureCode="de-DE"> <Element Key="lblDescription" Value="Bezeichnung" Value1="" ButtonOk="" ButtonCancel="" ButtonNo="" /> <Element Key="lblInventionId" Value="Erfindung" Value1="" ButtonOk="" ButtonCancel="" ButtonNo="" />
<Element Key="lblDate" Value="Datum" Value1="" ButtonOk="" ButtonCancel="" ButtonNo="" /> </Class> <Class ClassName="Inventor" CultureCode="de-DE"> <Element Key="lblName" Value="Name" Value1="" ButtonOk="" ButtonCancel="" ButtonNo="" /> <Element Key="lblInventorId" Value="Id" Value1="" ButtonOk="" ButtonCancel="" ButtonNo="" /> </Class> </TranslateModuls>Ich wollte "ClassName" und "CultureCode" im where-Ausdruck und dann die darunterliegenden Elemente bekommen um diese danach in eine Liste stecken zu können. Es können natürlich beliebig viele Elemente vorhanden sein.
Mit dieser Lösung bekomme ich aber immer Null raus.
XDocument localizationXml = XDocument.Load(localizationFile); var result = (from l in localizationXml.Descendants() where (string)l.Attribute("ClassName") == "Test" && (string)l.Attribute("CultureCode") == "de-DE" select new { Key = l.Attribute("Key"), Value = l.Attribute("Value") });
Hat jemand eine Idee wie es tatsächlich aussehen muß ?
Danke und Gruß
Gerhard
Antworten
-
Hi Gerhard,
nachfolgend eine kleine Konsolen-Demo, wie man Dein Problem lösen kann:using System; using System.Linq; using System.Xml.Linq; namespace ConsoleApplication1 { class Program26 { static void Main(string[] args) { try { Demo c = new Demo(); c.Execute(@"Program26XML.xml"); } catch (Exception ex) { var ex1 = ex; string msg = ""; while (ex1 != null) { msg += ex1.Message + Environment.NewLine; ex1 = ex1.InnerException; } Console.WriteLine(msg); } Console.Write("Fertig, Abschluss mit beliebiger Taste"); Console.ReadKey(); } internal class Demo { internal void Execute(string localizationFile) { XDocument localizationXml = XDocument.Load(localizationFile); var result = from l2 in (from l1 in localizationXml.Descendants("Class") where (string)l1.Attribute("ClassName") == "Invention" && (string)l1.Attribute("CultureCode") == "de-DE" select l1).Descendants() select new { Key = l2.Attribute("Key"), Value = l2.Attribute("Value") }; foreach (var item in result) { Console.WriteLine($"{item.Key}: {item.Value}"); } } } } }
--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks
Warum Groß- und Kleinschreibung wichtig ist:
Der Gefangene floh.
Der gefangene Floh.- Als Antwort markiert Gerhard Ahrens Dienstag, 6. September 2016 06:30
Alle Antworten
-
-
Hi Gerhard,
nachfolgend eine kleine Konsolen-Demo, wie man Dein Problem lösen kann:using System; using System.Linq; using System.Xml.Linq; namespace ConsoleApplication1 { class Program26 { static void Main(string[] args) { try { Demo c = new Demo(); c.Execute(@"Program26XML.xml"); } catch (Exception ex) { var ex1 = ex; string msg = ""; while (ex1 != null) { msg += ex1.Message + Environment.NewLine; ex1 = ex1.InnerException; } Console.WriteLine(msg); } Console.Write("Fertig, Abschluss mit beliebiger Taste"); Console.ReadKey(); } internal class Demo { internal void Execute(string localizationFile) { XDocument localizationXml = XDocument.Load(localizationFile); var result = from l2 in (from l1 in localizationXml.Descendants("Class") where (string)l1.Attribute("ClassName") == "Invention" && (string)l1.Attribute("CultureCode") == "de-DE" select l1).Descendants() select new { Key = l2.Attribute("Key"), Value = l2.Attribute("Value") }; foreach (var item in result) { Console.WriteLine($"{item.Key}: {item.Value}"); } } } } }
--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks
Warum Groß- und Kleinschreibung wichtig ist:
Der Gefangene floh.
Der gefangene Floh.- Als Antwort markiert Gerhard Ahrens Dienstag, 6. September 2016 06:30