J'ai obtenu ce fichier XML:
<root>
<level1 name="A">
<level2 name="A1" />
<level2 name="A2" />
</level1>
<level1 name="B">
<level2 name="B1" />
<level2 name="B2" />
</level1>
<level1 name="C" />
</root>
Quelqu'un pourrait-il me donner un code C # en utilisant LINQ, la façon la plus simple d'imprimer ce résultat:
(Notez l'espace supplémentaire s'il s'agit d'un level2
nœud)
A
A1
A2
B
B1
B2
C
Actuellement, j'ai ce code:
XDocument xdoc = XDocument.Load("data.xml"));
var lv1s = from lv1 in xdoc.Descendants("level1")
select lv1.Attribute("name").Value;
foreach (var lv1 in lv1s)
{
result.AppendLine(lv1);
var lv2s = from lv2 in xdoc...???
}
c#
xml
linq
linq-to-xml
Aximili
la source
la source
Réponses:
Essaye ça.
la source
Ou, si vous voulez une approche plus générale - c'est-à-dire pour l'imbrication jusqu'au "niveau N":
la source
Un couple de vieilles
foreach
boucles simples fournit une solution propre:la source
Voici quelques exemples de travail complets qui s'appuient sur les exemples @bendewey & @dommer. J'avais besoin de modifier un peu chacun pour le faire fonctionner, mais au cas où un autre noob LINQ chercherait des exemples de travail, voici:
Et ensuite:
Ces deux compilent et fonctionnent dans VS2010 en utilisant la version 4.0.30319.1 de csc.exe et donnent exactement la même sortie. J'espère que cela aidera quelqu'un d'autre qui cherche des exemples de code de travail.
EDIT: ajout de l'exemple de @eglasius également car il m'est devenu utile:
la source
Ps. Vous devez utiliser .Root sur l'une de ces versions.
la source