Maison >développement back-end >C++ >Comment LINQ peut-il simplifier la lecture et la mise en forme des données XML en C #?

Comment LINQ peut-il simplifier la lecture et la mise en forme des données XML en C #?

DDD
DDDoriginal
2025-01-30 05:16:08891parcourir

How Can LINQ Simplify Reading and Formatting XML Data in C#?

rationaliser le traitement des données XML avec C # linq

Tirer la mise à jour de Linq simplifie considérablement la manipulation des données XML en C #. Cet exemple présente comment lire et formater efficacement les données XML pour la sortie.

1. Chargement du document XML:

Le processus commence par charger le document XML:

<code class="language-csharp">XDocument xdoc = XDocument.Load("data.xml");</code>

2. Extraction des éléments de niveau 1 et de niveau 2:

Ensuite, une requête LINQ extrait les éléments "niveau1" et leurs enfants "niveau 2" associés:

<code class="language-csharp">var lv1Elements = from lv1 in xdoc.Descendants("level1")
                  select new
                  {
                      Header = lv1.Attribute("name")?.Value,
                      Children = lv1.Descendants("level2").Select(lv2 => lv2.Attribute("name")?.Value)
                  };</code>

Cette requête projette les données dans un type anonyme contenant l'en-tête "Level1" et une collection de noms "niveau2". Le ?.Value gère gracieusement les attributs nuls potentiels.

3. Formatage de la sortie:

Enfin, les données extraites sont formatées et sorties:

<code class="language-csharp">StringBuilder output = new StringBuilder();
foreach (var lv1 in lv1Elements)
{
    output.AppendLine(lv1.Header);
    foreach (var lv2 in lv1.Children)
    {
        output.AppendLine("     " + lv2);
    }
}

Console.WriteLine(output.ToString());</code>

Cette boucle itère à travers les résultats, ajoutant l'en-tête "niveau1" et les noms "de niveau 2" en retrait aux StringBuilder.

Exemple complet:

Voici le code complet et raffiné:

<code class="language-csharp">using System.Xml.Linq;
using System.Text;

public class XmlProcessor
{
    public static void Main(string[] args)
    {
        StringBuilder output = new StringBuilder();
        XDocument xdoc = XDocument.Load("data.xml");

        var lv1Elements = from lv1 in xdoc.Descendants("level1")
                          select new
                          {
                              Header = lv1.Attribute("name")?.Value,
                              Children = lv1.Descendants("level2").Select(lv2 => lv2.Attribute("name")?.Value)
                          };

        foreach (var lv1 in lv1Elements)
        {
            output.AppendLine(lv1.Header ?? "N/A"); // Handle potential null header
            foreach (var lv2 in lv1.Children ?? Enumerable.Empty<string>()) // Handle potential null children
            {
                output.AppendLine("     " + lv2);
            }
        }

        Console.WriteLine(output.ToString());
    }
}</code>

Cette version améliorée intègre des vérifications nuls pour la robustesse et utilise un StringBuilder pour une concaténation de chaîne efficace. L'approche LINQ offre une solution propre et lisible pour naviguer et traiter les données XML en C #.

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