Sådan arbejder du med XML-behandling i .NET

Sådan arbejder du med XML-behandling i .NET

XLSX-filer gemmer deres data i XML-deler inde i en OPC ZIP-pakke. Aspose.Cells FOSS for .NET behandler disse gennem fire XML-mapperklasser: WorkbookXmlMapper, WorksheetXmlMapper, SharedStringTableXmlMapper, og StylesheetXmlMapper. Forståelse af disse klasser hjælper dig med at diagnosticere parsefejl og korrekt konfigurere fejltolerant indlæsning. Installer med dotnet add package Aspose.Cells_FOSS.

Trin-for-trin guide

Trin 1: Installer pakken

dotnet add package Aspose.Cells_FOSS

Trin 2: Importer navnerummet

using Aspose.Cells_FOSS;

Trin 3: Forstå XML-mapperens ansvarsområder

Hver mapper håndterer en XML-del af XLSX‑strukturen:

KortlæggerXML-delHåndterer
WorkbookXmlMapperxl/workbook.xmlProjektmappe-metadata, arklisten, definerede navne
WorksheetXmlMapperxl/worksheets/sheetN.xmlCelledata, formler, hyperlinks, valideringer, betingede formater
SharedStringTableXmlMapperxl/sharedStrings.xmlDe-duplicerede strengværdier
StylesheetXmlMapperxl/styles.xmlCelleformater, skrifttyper, udfyldninger, kanter

Disse mapper kaldes automatisk under Workbook konstruktion og Save(). Du instansierer dem ikke direkte i applikationskoden.


Trin 4: Håndter XmlParsingException

XmlParsingException kastes, når en mapper støder på fejlformet XML, som ikke kan repareres. Aktiver TryRepairXml = true i LoadOptions for at aktivere mapperens fejltolerante parse‑sti.

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);
}

Trin 5: Brug LoadDiagnostics til at identificere XML‑problemer

Efter en vellykket indlæsning, tjek LoadDiagnostics.Issues for DiagnosticEntry poster for at forstå, hvilke XML-reparationer der blev anvendt, og om nogen resulterede i datatab.

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}");
}

Almindelige problemer og løsninger

XmlParsingException selv med TryRepairXml = true.
XML’en er så fejlbehæftet, at den fejl‑tolerante parser ikke kan gendanne den. Dette kan ske med filer, der er oprettet af ikke‑standardværktøjer, som producerer syntaktisk ugyldig XML. Der findes ingen gendannelsesvej for disse filer.

Stilarter mangler efter indlæsning. StylesheetXmlMapper kan have stødt på en korrupt xl/styles.xml. Tjek LoadDiagnostics.Issues for poster med kode relateret til stilarter, og DataLossRisk = true for berørte celler.

Delte strenge vises som tomme celler.
En korrupt xl/sharedStrings.xml kan forårsage, at celler, der refererer til den delte strengtabel, vises som tomme. Aktivér TryRepairXml for at forsøge at gendanne.

Ofte stillede spørgsmål

Kan jeg implementere en brugerdefineret XML-mapper?

Nej. XML‑mapperklasserne er forseglet intern infrastruktur og er ikke designet til udvidelse.

Hvorfor er SharedStringTableXmlMapper adskilt?

OOXML‑specifikationen adskiller gentagne strengværdier i en delt strengtabel for at reducere filstørrelsen. Mappere håndterer læsning og skrivning af denne tabel uafhængigt af celledata.

Løser TryRepairXml alle XML‑parseproblemer?

TryRepairXml håndterer genoprettelige fejl såsom uafsluttede elementer, manglende navnerum og afkortede attributværdier. Strukturelt gyldig men semantisk inkonsistent XML (f.eks. formel‑tokens, der refererer til ikke‑eksisterende celler) vil stadig parse uden fejl.

Se også

 Dansk