Cum să lucrați cu procesarea XML în .NET
Fișierele XLSX își stochează datele în părți XML în interiorul unui pachet OPC ZIP. Aspose.Cells FOSS pentru .NET le procesează prin patru clase de mapare XML: WorkbookXmlMapper, WorksheetXmlMapper, SharedStringTableXmlMapper și StylesheetXmlMapper. Înțelegerea acestor clase vă ajută să diagnosticați eșecurile de analiză și să configurați corect încărcarea tolerantă la erori. Instalați cu dotnet add package Aspose.Cells_FOSS.
Ghid pas cu pas
Pasul 1: Instalați pachetul
dotnet add package Aspose.Cells_FOSSPasul 2: Importă spațiul de nume
using Aspose.Cells_FOSS;Pasul 3: Înțelegeți responsabilitățile mapper-ului XML
Fiecare mapper gestionează o parte XML a structurii XLSX:
| Mapator | Partea XML | Gestionează |
|---|---|---|
WorkbookXmlMapper | xl/workbook.xml | Metadatele registrului de lucru, lista de foi, nume definite |
WorksheetXmlMapper | xl/worksheets/sheetN.xml | Datele celulelor, formule, hyperlinkuri, validări, formate condiționale |
SharedStringTableXmlMapper | xl/sharedStrings.xml | Valori de șiruri de caractere deduplicate |
StylesheetXmlMapper | xl/styles.xml | Stiluri de celule, fonturi, umpleri, borduri |
Acești mapatori sunt invocați automat în timpul construcției Workbook și Save(). Nu îi instanțiați direct în codul aplicației.
Pasul 4: Gestionați XmlParsingException
XmlParsingException este aruncat când un mapper întâlnește XML malformat care nu poate fi reparat. Activează TryRepairXml = true în LoadOptions pentru a activa calea de analiză tolerantă la erori a mapper‑ului.
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);
}Pasul 5: Utilizați LoadDiagnostics pentru a identifica problemele XML
După o încărcare reușită, verificați LoadDiagnostics.Issues pentru înregistrările DiagnosticEntry pentru a înțelege ce reparații XML au fost aplicate și dacă vreuna a dus la pierderea datelor.
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}");
}Probleme comune și soluții
XmlParsingException chiar și cu TryRepairXml = true.
XML-ul este atât de deformat încât parserul tolerant la erori nu îl poate recupera. Acest lucru se poate întâmpla cu fișiere create de instrumente non-standard care produc XML sintactic invalid. Nu există o cale de recuperare pentru aceste fișiere.
Stilurile lipsesc după încărcare.StylesheetXmlMapper ar fi putut întâlni un xl/styles.xml corupt. Verificați LoadDiagnostics.Issues pentru intrări cu cod legat de stiluri și DataLossRisk = true pentru celulele afectate.
Șirurile partajate apar ca celule goale.
Un xl/sharedStrings.xml corupt poate face ca celulele care fac referire la tabelul de șiruri partajate să fie afișate ca goale. Activați TryRepairXml pentru a încerca recuperarea.
Întrebări frecvente
Pot să implementez un mapper XML personalizat?
Nu. Clasele mapper XML sunt infrastructură internă sigilată și nu sunt concepute pentru extensie.
De ce este SharedStringTableXmlMapper separat?
Specificația OOXML separă valorile de șiruri repetate într-un tabel de șiruri partajat pentru a reduce dimensiunea fișierului. Mapper-ul gestionează citirea și scrierea acestui tabel independent de datele celulei.
Repară TryRepairXml toate problemele de analiză XML?
TryRepairXml gestionează erorile recuperabile, cum ar fi elementele neînchise, spațiile de nume lipsă și valorile de atribut trunchiate. XML valid din punct de vedere structural, dar inconsistent semantic (de exemplu, token-uri de formulă care fac referire la celule inexistente) va fi în continuare analizat fără eroare.