Slik jobber du med XML-behandling i .NET
XLSX-filer lagrer dataene sine i XML-deler inne i en OPC ZIP-pakke. Aspose.Cells FOSS for .NET behandler disse gjennom fire XML‑mapperklasser: WorkbookXmlMapper, WorksheetXmlMapper, SharedStringTableXmlMapper, og StylesheetXmlMapper. Å forstå disse klassene hjelper deg med å diagnostisere parsefeil og korrekt konfigurere feil‑tolerende lasting. Installer med dotnet add package Aspose.Cells_FOSS.
Steg-for-steg guide
Steg 1: Installer pakken
dotnet add package Aspose.Cells_FOSSSteg 2: Importer navnerommet
using Aspose.Cells_FOSS;Steg 3: Forstå XML-mapperens ansvar
Hver mapper håndterer én XML-del av XLSX‑strukturen:
| Mapper | XML Part | Handles |
|---|---|---|
WorkbookXmlMapper | xl/workbook.xml | Arbeidsbokmetadata, arkliste, definerte navn |
WorksheetXmlMapper | xl/worksheets/sheetN.xml | Celldata, formler, hyperkoblinger, valideringer, betingede formater |
SharedStringTableXmlMapper | xl/sharedStrings.xml | De-dupliserte strengverdier |
StylesheetXmlMapper | xl/styles.xml | Celleformater, skrifttyper, fyll, kanter |
Disse mapperne blir kalt automatisk under Workbook-konstruksjon og Save(). Du oppretter dem ikke direkte i applikasjonskoden.
Trinn 4: Håndter XmlParsingException
XmlParsingException kastes når en mapper støter på feilformatert XML som ikke kan repareres. Aktiver TryRepairXml = true i LoadOptions for å aktivere mapperens feiltolerante parsingssti.
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);
}Steg 5: Bruk LoadDiagnostics for å identifisere XML-problemer
Etter en vellykket lasting, sjekk LoadDiagnostics.Issues for DiagnosticEntry poster for å forstå hvilke XML-reparasjoner som ble brukt og om noen resulterte i datatap.
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}");
}Vanlige problemer og løsninger
XmlParsingException selv med TryRepairXml = true.
XML-en er så feilformatert at den feiltolerante parseren ikke kan gjenopprette den. Dette kan skje med filer laget av ikke‑standardverktøy som produserer syntaktisk ugyldig XML. Det finnes ingen gjenopprettingsvei for disse filene.
Stiler mangler etter lasting.
Den StylesheetXmlMapper kan ha støtt på en korrupt xl/styles.xml. Sjekk LoadDiagnostics.Issues for oppføringer med kode relatert til stiler, og DataLossRisk = true for berørte celler.
Delte strenger vises som tomme celler.
En korrupt xl/sharedStrings.xml kan forårsake at celler som refererer til den delte strengtabellen blir vist som tomme. Aktiver TryRepairXml for å forsøke gjenoppretting.
Ofte stilte spørsmål
Kan jeg implementere en egendefinert XML-mapper?
Nei. XML-mapperklassene er forseglet intern infrastruktur og er ikke designet for utvidelse.
Hvorfor er SharedStringTableXmlMapper separat?
OOXML-spesifikasjonen separerer gjentatte strengverdier i en delt strengtabell for å redusere filstørrelsen. Mapperen håndterer lesing og skriving av denne tabellen uavhengig av celledata.
Fikser TryRepairXml alle XML‑parsingproblemer?
TryRepairXml håndterer gjenopprettbare feil som ufullstendige elementer, manglende navnerom og avkortede attributtverdier. Strukturmessig gyldig, men semantisk inkonsistent XML (f.eks. formel‑token som refererer til ikke‑eksisterende celler) vil fortsatt bli analysert uten feil.