Mam ten plik 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>
Czy ktoś mógłby dać mi kod C # za pomocą LINQ, najprostszy sposób na wydrukowanie tego wyniku:
(Zwróć uwagę na dodatkowe miejsce, jeśli jest to level2
węzeł)
A
A1
A2
B
B1
B2
C
Obecnie mam ten kod:
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
źródło
źródło
Odpowiedzi:
Spróbuj tego.
źródło
Lub, jeśli chcesz zastosować bardziej ogólne podejście - tj. Do zagnieżdżania do „poziomu N”:
źródło
Kilka prostych starych
foreach
pętli zapewnia czyste rozwiązanie:źródło
Oto kilka kompletnych przykładów roboczych opartych na przykładach @bendewey i @dommer. Musiałem trochę ulepszyć każdy z nich, aby działał, ale na wypadek, gdyby inny LINQ noob szuka działających przykładów, proszę bardzo:
I dalej:
Oba kompilują i działają w VS2010 przy użyciu csc.exe w wersji 4.0.30319.1 i dają dokładnie takie same wyniki. Mam nadzieję, że pomogą one komuś innemu, kto szuka działających przykładów kodu.
EDYCJA: dodał również przykład @eglasius, ponieważ stał się dla mnie użyteczny:
źródło
Ps. Musisz użyć .Root na dowolnej z tych wersji.
źródło