Slik jobber du med XML-behandling i .NET

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_FOSS

Steg 2: Importer navnerommet

using Aspose.Cells_FOSS;

Steg 3: Forstå XML-mapperens ansvar

Hver mapper håndterer én XML-del av XLSX‑strukturen:

MapperXML PartHandles
WorkbookXmlMapperxl/workbook.xmlArbeidsbokmetadata, arkliste, definerte navn
WorksheetXmlMapperxl/worksheets/sheetN.xmlCelldata, formler, hyperkoblinger, valideringer, betingede formater
SharedStringTableXmlMapperxl/sharedStrings.xmlDe-dupliserte strengverdier
StylesheetXmlMapperxl/styles.xmlCelleformater, 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.

Se også

 Norsk