Comment travailler avec le traitement XML dans .NET

Comment travailler avec le traitement XML dans .NET

Les fichiers XLSX stockent leurs données dans des parties XML à l’intérieur d’un package OPC ZIP. Aspose.Cells FOSS for .NET traite ceux‑ci via quatre classes de mappage XML : WorkbookXmlMapper, WorksheetXmlMapper, SharedStringTableXmlMapper et StylesheetXmlMapper. Comprendre ces classes vous aide à diagnostiquer les échecs d’analyse et à configurer correctement le chargement tolérant aux fautes. Installez avec dotnet add package Aspose.Cells_FOSS.

Guide étape par étape

Étape 1 : Installer le package

dotnet add package Aspose.Cells_FOSS

Étape 2 : Importer l’espace de noms

using Aspose.Cells_FOSS;

Étape 3 : Comprendre les responsabilités du mapper XML

Chaque mapper gère une partie XML de la structure XLSX :

MapperPartie XMLGère
WorkbookXmlMapperxl/workbook.xmlMétadonnées du classeur, liste des feuilles, noms définis
WorksheetXmlMapperxl/worksheets/sheetN.xmlDonnées de cellules, formules, hyperliens, validations, formats conditionnels
SharedStringTableXmlMapperxl/sharedStrings.xmlValeurs de chaînes dédupliquées
StylesheetXmlMapperxl/styles.xmlStyles de cellules, polices, remplissages, bordures

Ces mappers sont invoqués automatiquement pendant la construction Workbook et Save(). Vous ne les instanciez pas directement dans le code de l’application.


Étape 4 : Gérer XmlParsingException

XmlParsingException est levé lorsqu’un mapper rencontre un XML malformé qui ne peut pas être réparé. Activez TryRepairXml = true dans LoadOptions pour activer le chemin d’analyse tolérant aux fautes du mapper.

using Aspose.Cells_FOSS;

var opts = new LoadOptions
{
    TryRepairPackage = true,
    TryRepairXml = true,
};

try
{
    var wb = new Workbook("malformed.xlsx", opts);
    Console.WriteLine("Loaded: " + wb.Worksheets.Count + " sheet(s)");

    var diag = wb.LoadDiagnostics;
    if (diag.HasRepairs)
        Console.WriteLine("XML repairs applied. Data loss risk: " + diag.HasDataLossRisk);
}
catch (XmlParsingException ex)
{
    Console.WriteLine("Unrecoverable XML error: " + ex.Message);
}
catch (WorkbookLoadException ex)
{
    Console.WriteLine("Load failed: " + ex.Message);
}

Étape 5 : Utilisez LoadDiagnostics pour identifier les problèmes XML

Après un chargement réussi, vérifiez LoadDiagnostics.Issues pour les enregistrements DiagnosticEntry afin de comprendre quelles réparations XML ont été appliquées et si certaines ont entraîné une perte de données.

using Aspose.Cells_FOSS;

var opts = new LoadOptions { TryRepairXml = true };
var wb = new Workbook("file.xlsx", opts);
var diag = wb.LoadDiagnostics;

foreach (var entry in diag.Issues)
{
    Console.WriteLine($"[{entry.Severity}] {entry.Code}");
    Console.WriteLine($"  Message: {entry.Message}");
    Console.WriteLine($"  RepairApplied: {entry.RepairApplied}  DataLossRisk: {entry.DataLossRisk}");
}

Problèmes courants et solutions

XmlParsingException même avec TryRepairXml = true.
Le XML est tellement malformé que l’analyseur tolérant aux fautes ne peut pas le récupérer. Cela peut se produire avec des fichiers créés par des outils non standard qui produisent du XML syntaxiquement invalide. Il n’existe aucun chemin de récupération pour ces fichiers.

Les styles sont manquants après le chargement. Le StylesheetXmlMapper a peut‑être rencontré un xl/styles.xml corrompu. Vérifiez LoadDiagnostics.Issues pour les entrées contenant du code lié aux styles, et DataLossRisk = true pour les cellules affectées.

Les chaînes partagées apparaissent comme des cellules vides.
Un xl/sharedStrings.xml corrompu peut entraîner que les cellules qui font référence à la table des chaînes partagées s’affichent vides. Activez TryRepairXml pour tenter la récupération.

Foire aux questions

Puis‑je implémenter un mapper XML personnalisé ?

Non. Les classes de mappage XML sont une infrastructure interne scellée et ne sont pas conçues pour être étendues.

Pourquoi le SharedStringTableXmlMapper est‑il séparé ?

La spécification OOXML sépare les valeurs de chaîne répétées dans une table de chaînes partagées afin de réduire la taille du fichier. Le mapper gère la lecture et l’écriture de cette table de manière indépendante des données de cellule.

Est‑ce que TryRepairXml corrige tous les problèmes d’analyse XML ?

TryRepairXml gère les erreurs récupérables telles que les éléments non fermés, les espaces de noms manquants et les valeurs d’attribut tronquées. Un XML structurellement valide mais sémantiquement incohérent (par ex. des jetons de formule faisant référence à des cellules inexistantes) sera tout de même analysé sans erreur.

Voir aussi

 Français