Eu tenho esse arquivo 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>
Alguém poderia me dar um código C # usando LINQ, a maneira mais simples de imprimir este resultado:
(Observe o espaço extra, se for um level2
nó)
A
A1
A2
B
B1
B2
C
Atualmente eu tenho esse código:
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
fonte
fonte
Respostas:
Tente isso.
fonte
Ou, se você quiser uma abordagem mais geral - por exemplo, para aninhar até "levelN":
fonte
Alguns
foreach
loops antigos simples fornecem uma solução limpa:fonte
Aqui estão alguns exemplos de trabalho completos baseados nos exemplos @bendewey & @dommer. Eu precisava ajustar um pouco cada um para fazê-lo funcionar, mas, caso outro LINQ noob esteja procurando exemplos de trabalho, aqui está:
E a seguir:
Ambos compilam e funcionam no VS2010 usando a versão 4.0.30319.1 do csc.exe e fornecem exatamente a mesma saída. Espero que isso ajude alguém que esteja procurando exemplos de código funcionais.
EDIT: adicionou o exemplo do @eglasius também, pois se tornou útil para mim:
fonte
Ps. Você precisa usar .Root em qualquer uma dessas versões.
fonte