Ako pracovať so spracovaním XML v .NET
Súbory XLSX ukladajú svoje údaje v XML častiach vnútri balíka OPC ZIP. Aspose.Cells FOSS pre .NET spracováva tieto pomocou štyroch tried XML mapovačov: WorkbookXmlMapper, WorksheetXmlMapper, SharedStringTableXmlMapper, a StylesheetXmlMapper. Pochopenie týchto tried vám pomôže diagnostikovať zlyhania parsovania a správne nakonfigurovať odolné načítanie. Nainštalujte pomocou dotnet add package Aspose.Cells_FOSS.
Návod krok za krokom
Krok 1: Nainštalovať balík
dotnet add package Aspose.Cells_FOSSKrok 2: Importovať menný priestor
using Aspose.Cells_FOSS;Krok 3: Pochopiť zodpovednosti XML mapovača
Každý mapovač spracováva jednu časť XML štruktúry XLSX:
| Mapovač | XML časť | Spracováva |
|---|---|---|
WorkbookXmlMapper | xl/workbook.xml | Metadáta zošita, zoznam hárkov, definované mená |
WorksheetXmlMapper | xl/worksheets/sheetN.xml | Dáta buniek, vzorce, hyperodkazy, overovania, podmienené formáty |
SharedStringTableXmlMapper | xl/sharedStrings.xml | Odstránené duplicitné reťazcové hodnoty |
StylesheetXmlMapper | xl/styles.xml | Štýly buniek, písma, výplne, okraje |
Tieto mapovače sa vyvolávajú automaticky počas konštrukcie Workbook a Save(). Nevytvárate ich priamo v aplikačnom kóde.
Krok 4: Spracovať XmlParsingException
XmlParsingException sa vyhodí, keď mapper narazí na nesprávne formátované XML, ktoré nie je možné opraviť. Povoliť TryRepairXml = true v LoadOptions na aktiváciu cesty parsovania odolnej voči chybám mappera.
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);
}Krok 5: Použite LoadDiagnostics na identifikáciu XML problémov
Po úspešnom načítaní skontrolujte LoadDiagnostics.Issues pre DiagnosticEntry záznamy, aby ste pochopili, ktoré opravy XML boli použité a či niektoré viedli k strate dát.
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}");
}Bežné problémy a riešenia
XmlParsingException aj s TryRepairXml = true.
XML je tak zle formátovaný, že parser odolný voči chybám ho nedokáže obnoviť. K tomu môže dôjsť so súbormi vytvorenými neštandardnými nástrojmi, ktoré produkujú syntakticky neplatný XML. Pre tieto súbory neexistuje žiadna cesta obnovy.
Štýly chýbajú po načítaní.StylesheetXmlMapper mohol naraziť na poškodený xl/styles.xml. Skontrolujte LoadDiagnostics.Issues pre položky s kódom súvisiacim so štýlmi a DataLossRisk = true pre ovplyvnené bunky.
Zdieľané reťazce sa zobrazujú ako prázdne bunky.
Poškodený xl/sharedStrings.xml môže spôsobiť, že bunky odkazujúce na tabuľku zdieľaných reťazcov sa zobrazia ako prázdne. Povoliť TryRepairXml na pokus o obnovu.
Často kladené otázky
Môžem implementovať vlastný XML mapper?
Nie. Triedy XML mapper sú uzavretá interná infraštruktúra a nie sú určené na rozšírenie.
Prečo je SharedStringTableXmlMapper oddelený?
Špecifikácia OOXML oddeľuje opakujúce sa reťazcové hodnoty do zdieľanej tabuľky reťazcov, aby znížila veľkosť súboru. Mapper spracováva čítanie a zápis tejto tabuľky nezávisle od údajov buniek.
Opravuje TryRepairXml všetky problémy s parsovaním XML?
TryRepairXml spracováva obnoviteľné chyby, ako sú neuzavreté elementy, chýbajúce menné priestory a skrátené hodnoty atribútov. Štrukturálne platné, ale sémanticky nekonzistentné XML (napr. tokeny vzorcov odkazujúce na neexistujúce bunky) sa stále parsuje bez chyby.