Linq à XML: une approche puissante de la gestion des données XML
.net Linq to XML fournit un moyen élégant et efficace de traiter les données XML. Examinons comment analyser et formater les structures XML imbriquées en utilisant C #. Considérez cet échantillon XML:
<code class="language-xml"><root><level1 name="A"><level2 name="A1"></level2><level2 name="A2"></level2></level1><level1 name="B"><level2 name="B1"></level2><level2 name="B2"></level2></level1><level1 name="C"></level1></root></code>
Notre objectif est de produire ces données dans un format hiérarchique:
<code>A A1 A2 B B1 B2 C</code>
analyse avec linq à xml
Nous commençons par charger le XML en utilisant XDocument.Load()
. Ensuite, une requête LINQ sélectionne les nœuds level1
et leurs attributs "nom":
<code class="language-csharp">XDocument xdoc = XDocument.Load("data.xml"); var level1Nodes = from level1 in xdoc.Descendants("level1") select level1.Attribute("name").Value;</code>
Accès aux nœuds de niveau 2 imbriqués
Pour accéder aux nœuds imbriqués level2
, nous utilisons une boucle imbriquée. À l'intérieur de la boucle extérieure (iterating via level1Nodes
), une deuxième requête LINQ filtre level2
nœuds basés sur l'attribut "nom" de leur parent:
<code class="language-csharp">foreach (var level1 in level1Nodes) { Console.WriteLine(level1); var level2Nodes = from level2 in xdoc.Descendants("level2") where level2.Parent.Attribute("name").Value == level1 select level2.Attribute("name").Value; foreach (var level2 in level2Nodes) { Console.WriteLine(" " + level2); } }</code>
L'indentation ("") distingue le niveau 2 des nœuds de niveau 1 dans la sortie.
Terminer le code C #
Voici l'extrait complet de code fonctionnel:
<code class="language-csharp">using System.Xml.Linq; public class XmlParser { public static void Main(string[] args) { XDocument xdoc = XDocument.Load("data.xml"); var level1Nodes = from level1 in xdoc.Descendants("level1") select level1.Attribute("name").Value; foreach (var level1 in level1Nodes) { Console.WriteLine(level1); var level2Nodes = from level2 in xdoc.Descendants("level2") where level2.Parent.Attribute("name").Value == level1 select level2.Attribute("name").Value; foreach (var level2 in level2Nodes) { Console.WriteLine(" " + level2); } } } }</code>
Cela démontre la puissance et l'efficacité de LINQ à XML pour l'analyse et la mise en forme des structures XML complexes dans un C # CodeBase propre et lisible.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!