Maison >développement back-end >C++ >Comment puis-je lire et traiter efficacement des données XML à l'aide de XmlReader en 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!