XDocument xDoc = XDocument.Load(myXml); //load your XML from file or stream
var rows = xDoc.Descendants("item").Select(x => string.Format(
@"\{0}-{1}\{2}-{3}",
x.Ancestors("itemGroup").First().Attribute("description").Value,
x.Ancestors("itemGroup").First().Attribute("label").Value,
x.Attribute("label").Value,
x.Attribute("description").Value));
Décomposons ce que nous faisons:
xDoc.Descendants("item")
nous amène tous <item>
éléments dans le document entier
Select(x => string.Format(format, args)
projets chaque <item>
nous avons reçu de la dernière opération dans n'importe quel format que nous spécifions dans le lambda. Dans ce cas, un formatted string. En termes d'arborescence XML, nous sommes "assis au" niveau <item>
, nous devons donc restaurer l'arborescence pour obtenir les données du groupe parent à l'aide de Ancestors
. Puisque cette méthode renvoie une séquence d'éléments, nous savons que nous voulons la première (la plus proche de nous) afin que nous puissions lire son attribut. Maintenant vous avez
un IEnumerable<string>
, un pour chaque <item>
dans votre document XML et les informations dans le format que vous avez spécifié:
foreach(string row in rows)
{
Console.WriteLine(row);
}
Merci beaucoup! N'ayant jamais analysé le xml auparavant, votre explication a énormément aidé. À votre santé – smashbourne