Jak pracovat se zpracováním XML v .NET
Soubory XLSX ukládají svá data v XML částech uvnitř balíčku OPC ZIP. Aspose.Cells FOSS pro .NET je zpracovává pomocí čtyř tříd XML mapper: WorkbookXmlMapper, WorksheetXmlMapper, SharedStringTableXmlMapper a StylesheetXmlMapper. Porozumění těmto třídám vám pomůže diagnostikovat selhání parsování a správně nakonfigurovat tolerantní načítání. Nainstalujte pomocí dotnet add package Aspose.Cells_FOSS.
Průvodce krok za krokem
Krok 1: Nainstalujte balíček
dotnet add package Aspose.Cells_FOSSKrok 2: Importovat jmenný prostor
using Aspose.Cells_FOSS;Krok 3: Pochopit odpovědnosti XML mapperu
Každý mapper zpracovává jednu XML část struktury XLSX:
| Mapovač | XML část | Zpracovává |
|---|---|---|
WorkbookXmlMapper | xl/workbook.xml | Metadata sešitu, seznam listů, definované názvy |
WorksheetXmlMapper | xl/worksheets/sheetN.xml | Data buněk, vzorce, hypertextové odkazy, validace, podmíněné formátování |
SharedStringTableXmlMapper | xl/sharedStrings.xml | Odstraněné duplicitní řetězcové hodnoty |
StylesheetXmlMapper | xl/styles.xml | Styly buněk, písma, výplně, okraje |
Tyto mapovače jsou volány automaticky během konstrukce Workbook a Save(). Nevytváříte je přímo v aplikačním kódu.
Krok 4: Ošetřit XmlParsingException
XmlParsingException je vyvolán, když mapper narazí na poškozené XML, které nelze opravit. Povolením TryRepairXml = true v LoadOptions aktivujete cestu tolerantní k chybám při parsování mapperu.
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žijte LoadDiagnostics k identifikaci problémů s XML
Po úspěšném načtení zkontrolujte LoadDiagnostics.Issues na DiagnosticEntry záznamy, abyste pochopili, které opravy XML byly aplikovány a zda některé vedly ke ztrátě dat.
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}");
}Běžné problémy a opravy
XmlParsingException i s TryRepairXml = true.
XML je tak poškozené, že parser odolný vůči chybám jej nedokáže obnovit. K tomu může dojít u souborů vytvořených nestandardními nástroji, které produkují syntakticky neplatné XML. Pro tyto soubory neexistuje žádná cesta obnovy.
Styly chybí po načtení.StylesheetXmlMapper mohl narazit na poškozený xl/styles.xml. Zkontrolujte LoadDiagnostics.Issues pro položky s kódem souvisejícím se styly a DataLossRisk = true pro ovlivněné buňky.
Sdílené řetězce se zobrazují jako prázdné buňky.
Poškozený xl/sharedStrings.xml může způsobit, že buňky odkazující na tabulku sdílených řetězců se zobrazí jako prázdné. Povolením TryRepairXml se pokusíte o obnovu.
Často kladené otázky
Mohu implementovat vlastní XML mapper?
Ne. Třídy XML mapper jsou uzavřená interní infrastruktura a nejsou určeny k rozšíření.
Proč je SharedStringTableXmlMapper oddělený?
Specifikace OOXML odděluje opakující se řetězcové hodnoty do sdílené tabulky řetězců, aby snížila velikost souboru. Mapper zpracovává čtení a zápis této tabulky nezávisle na datech buněk.
Opravuje TryRepairXml všechny problémy s analýzou XML?
TryRepairXml zpracovává obnovitelné chyby, jako jsou neuzavřené elementy, chybějící jmenné prostory a zkrácené hodnoty atributů. Strukturně platné, ale sémanticky nekonzistentní XML (např. tokeny vzorců odkazující na neexistující buňky) bude i nadále parsováno bez chyby.