Maison >développement back-end >C++ >Comment LINQ à XML peut-il analyser et formater efficacement les données XML imbriquées?

Comment LINQ à XML peut-il analyser et formater efficacement les données XML imbriquées?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-30 05:01:08908parcourir

How Can LINQ to XML Efficiently Parse and Format Nested XML Data?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn