Maison >développement back-end >C++ >Comment puis-je lire et traiter efficacement des données XML à l'aide de XmlReader en C# ?

Comment puis-je lire et traiter efficacement des données XML à l'aide de XmlReader en C# ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-22 07:27:10493parcourir

How Can I Efficiently Read and Process XML Data Using XmlReader in C#?

Optimisation de l'analyse XML en C# avec XmlReader

Pour un traitement efficace des documents XML en C#, une approche structurée utilisant des classes distinctes pour différents nœuds est recommandée. Cet exemple se concentre sur la lecture de Account données, avec une classe AccountBase dédiée pour gérer des propriétés telles que NameOfKin. Le défi de la navigation vers l'élément StatementsAvailable est élégamment résolu en utilisant XmlReader.Skip().

La classe AccountBase intègre l'extrait de code suivant :

<code class="language-csharp">while (reader.Read())
{
    if (reader.NodeType == XmlNodeType.Element)
    {
        if (reader.Name == "StatementsAvailable")
        {
            reader.Skip(); // Efficiently skips the StatementsAvailable element and its children
            ProcessStatements(reader);
            break; // Moves to the next Account element
        }
    }
}</code>

La méthode ProcessStatements(), à son tour, utilise une classe Statement pour analyser les propriétés des instructions individuelles. Cette conception modulaire s'étend de manière transparente à d'autres sous-éléments XML.

Bien que XmlReader excelle dans le streaming efficace, LINQ to XML offre une syntaxe plus conviviale pour la manipulation XML. Pour les fichiers XML volumineux, envisagez une approche hybride : diffusez les données en morceaux gérables à l'aide de XmlReader, puis traitez ces morceaux à l'aide du LINQ to XML, plus pratique.

Structure de code améliorée avec gestion des boucles imbriquées :

Cet exemple de code affiné simplifie la boucle de lecture imbriquée et évite les erreurs potentielles de « lecture au-delà de l'élément attendu » :

<code class="language-csharp">using (XmlReader reader = XmlReader.Create(inputUrl))
{
    reader.ReadToDescendant("ApplicationPool"); // Directly navigate to the root element

    while (reader.Read())
    {
        if (reader.NodeType == XmlNodeType.Element && reader.Name == "Account")
        {
            AccountBase account = new AccountBase(reader);
            reader.ReadToFollowing("StatementsAvailable"); // Efficiently finds StatementsAvailable
            reader.Skip();
            account.ProcessStatements(reader);
        }
    }
}</code>

Cette amélioration rationalise le processus, rendant le code plus propre et plus robuste. La navigation directe vers l'élément racine et l'utilisation de ReadToFollowing améliorent l'efficacité et la lisibilité.

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