Tengo este archivo 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>
¿Podría alguien darme un código C # usando LINQ, la forma más sencilla de imprimir este resultado:
(Tenga en cuenta el espacio adicional si es un level2
nodo)
A
A1
A2
B
B1
B2
C
Actualmente tengo este 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
fuente
fuente
Respuestas:
Prueba esto.
fuente
O, si desea un enfoque más general, es decir, para anidar hasta "levelN":
fuente
Un par de simples
foreach
bucles antiguos proporciona una solución limpia:fuente
Aquí hay un par de ejemplos de trabajo completos que se basan en los ejemplos de @bendewey y @dommer. Necesitaba ajustar cada uno un poco para que funcione, pero en caso de que otro novato de LINQ esté buscando ejemplos de trabajo, aquí tienes:
Y después:
Ambos compilan y funcionan en VS2010 usando csc.exe versión 4.0.30319.1 y dan exactamente el mismo resultado. Esperemos que esto ayude a alguien que esté buscando ejemplos de código que funcionen.
EDITAR: también agregó el ejemplo de @eglasius ya que me resultó útil:
fuente
PD. Tienes que usar .Root en cualquiera de estas versiones.
fuente