J’ai obtenu ce fichier XML
Quelqu'un pourrait-il me donner un code c# à l’aide de LINQ, la façon la plus simple d’imprimer ce résultat :
(Notez l’espace supplémentaire si elle est un nœud de niveau 2)
Actuellement, j’ai obtenu ce code
J’ai obtenu ce fichier XML
Quelqu'un pourrait-il me donner un code c# à l’aide de LINQ, la façon la plus simple d’imprimer ce résultat :
(Notez l’espace supplémentaire si elle est un nœud de niveau 2)
Actuellement, j’ai obtenu ce code
Voici un couple de compléter exemples de travail qui s'appuient sur l' @bendewey & @dommer exemples. J'avais besoin de tweak chacun un peu pour le faire fonctionner, mais dans le cas où un autre LINQ noob est à la recherche d'exemples de travail, ici, vous allez:
//bendewey's example using data.xml from OP
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
class loadXMLToLINQ1
{
static void Main( )
{
//Load xml
XDocument xdoc = XDocument.Load(@"c:\\data.xml"); //you'll have to edit your path
//Run query
var lv1s = from lv1 in xdoc.Descendants("level1")
select new
{
Header = lv1.Attribute("name").Value,
Children = lv1.Descendants("level2")
};
StringBuilder result = new StringBuilder(); //had to add this to make the result work
//Loop through results
foreach (var lv1 in lv1s)
{
result.AppendLine(" " + lv1.Header);
foreach(var lv2 in lv1.Children)
result.AppendLine(" " + lv2.Attribute("name").Value);
}
Console.WriteLine(result.ToString()); //added this so you could see the output on the console
}
}
Et suivant:
//Dommer's example, using data.xml from OP
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
class loadXMLToLINQ
{
static void Main( )
{
XElement rootElement = XElement.Load(@"c:\\data.xml"); //you'll have to edit your path
Console.WriteLine(GetOutline(0, rootElement));
}
static private string GetOutline(int indentLevel, XElement element)
{
StringBuilder result = new StringBuilder();
if (element.Attribute("name") != null)
{
result = result.AppendLine(new string(' ', indentLevel * 2) + element.Attribute("name").Value);
}
foreach (XElement childElement in element.Elements())
{
result.Append(GetOutline(indentLevel + 1, childElement));
}
return result.ToString();
}
}
Ces deux compiler et travailler dans VS2010 à l'aide de csc.exe version 4.0.30319.1 et de donner exactement la même sortie. Espérons que cela aide quelqu'un d'autre qui est à la recherche de travail exemples de code.
EDIT: ajout de @eglasius' exemple, car il est apparu utile de moi:
//@eglasius example, still using data.xml from OP
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
class loadXMLToLINQ2
{
static void Main( )
{
StringBuilder result = new StringBuilder(); //needed for result below
XDocument xdoc = XDocument.Load(@"c:\\deg\\data.xml"); //you'll have to edit your path
var lv1s = xdoc.Root.Descendants("level1");
var lvs = lv1s.SelectMany(l=>
new string[]{ l.Attribute("name").Value }
.Union(
l.Descendants("level2")
.Select(l2=>" " + l2.Attribute("name").Value)
)
);
foreach (var lv in lvs)
{
result.AppendLine(lv);
}
Console.WriteLine(result);//added this so you could see the result
}
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.