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
Libérer: 2025-01-30 05:01:08
original
905 Les gens l'ont consulté

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>
Copier après la connexion

Notre objectif est de produire ces données dans un format hiérarchique:

<code>A
  A1
  A2
B
  B1
  B2
C</code>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal