2 votes

Un moyen rapide d'obtenir différentes valeurs de nœuds à partir d'un fichier en C# ?

Je veux obtenir les valeurs de différents noeuds en utilisant différentes conditions d'un fichier xml dans différentes variables. Voici un exemple

XDocument doc = XDocument.Load(@"D:\MyFiles\test.xml", LoadOptions.PreserveWhitespace);
var a = (from x in doc.Descendants("title")
         select x).First().Value;
var b = (from y in doc.Descendants("label")  
         where y.Ancestors("sec").Any()
         select y).First().Value;
var c = (from z in doc.Descendants("sec").Attributes("id")
         select z).First().Value;

Puis-je faire cela en une seule ligne de code ou peut-être d'une manière moins redondante ?

6voto

Jon Skeet Points 692016

Vous n'avez certainement pas besoin d'utiliser les expressions de requête - elles ne font que vous gêner. Ce code serait plus simple comme :

XDocument doc = XDocument.Load(@"D:\MyFiles\test.xml",LoadOptions.PreserveWhitespace);
var a = doc.Descendants("title").First().Value;
var b = doc.Descendants("label").First(y => y.Ancestors("sec").Any()).Value;
var c = doc.Descendants("sec").Attributes("id").First().Value;

Sinon, vous pourriez utiliser XPath si vous le souhaitez. ( XPathSelectElements , XPathEvaluateNode ) Personnellement, je préfère continuer à utiliser les méthodes d'interrogation fournies par LINQ to XML.

0voto

daniell89 Points 1017

Vous pouvez également utiliser le type anonyme :

var res = from xml in xDoc.Descendants("filePath")
          select new
          {
              Title = xml.Descendants("title").FirstOrDefault()?.Value,
              Label = xml.Descendants("label").FirstOrDefault(l => l.Ancestors("sec").Any())?.Value,
              Sec = xml.Descendants("sec").Attributes("id").FirstOrDefault()?.Value
          };

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X