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 :
| Mapper | Partie XML | Gère |
|---|---|---|
WorkbookXmlMapper | xl/workbook.xml | Métadonnées du classeur, liste des feuilles, noms définis |
WorksheetXmlMapper | xl/worksheets/sheetN.xml | Données de cellules, formules, hyperliens, validations, formats conditionnels |
SharedStringTableXmlMapper | xl/sharedStrings.xml | Valeurs de chaînes dédupliquées |
StylesheetXmlMapper | xl/styles.xml | Styles 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.