Kako raditi s XML obradom u .NET-u
XLSX datoteke pohranjuju svoje podatke u XML dijelove unutar OPC ZIP paketa. Aspose.Cells FOSS za .NET obrađuje ih putem četiri XML mapper klase: WorkbookXmlMapper, WorksheetXmlMapper, SharedStringTableXmlMapper i StylesheetXmlMapper. Razumijevanje ovih klasa pomaže vam u dijagnosticiranju neuspjeha parsiranja i pravilnom konfiguriranju otpornog učitavanja. Instalirajte pomoću dotnet add package Aspose.Cells_FOSS.
Vodič korak po korak
Korak 1: Instalirajte paket
dotnet add package Aspose.Cells_FOSSKorak 2: Uvezi prostor imena
using Aspose.Cells_FOSS;Korak 3: Razumjeti odgovornosti XML Mapper
Svaki mapper obrađuje jedan XML dio XLSX strukture:
| Mapper | XML dio | Obrađuje |
|---|---|---|
WorkbookXmlMapper | xl/workbook.xml | Metapodaci radne knjige, popis listova, definirana imena |
WorksheetXmlMapper | xl/worksheets/sheetN.xml | Podaci ćelija, formule, hiperveze, provjere, uvjetni formati |
SharedStringTableXmlMapper | xl/sharedStrings.xml | Uklonjene duplikatne vrijednosti stringova |
StylesheetXmlMapper | xl/styles.xml | Stilovi ćelija, fontovi, ispuni, rubovi |
Ovi maperi se automatski pozivaju tijekom izgradnje Workbook i Save(). Ne instancirate ih izravno u kodu aplikacije.
Korak 4: Obradi XmlParsingException
XmlParsingException se baca kada mapper naiđe na oštećeni XML koji se ne može popraviti. Omogućite TryRepairXml = true u LoadOptions kako biste aktivirali put otporan na greške pri parsiranju 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);
}Korak 5: Upotrijebite LoadDiagnostics za identificiranje XML problema
Nakon uspješnog učitavanja, provjerite LoadDiagnostics.Issues za DiagnosticEntry zapise kako biste razumjeli koje su XML popravke primijenjene i jesu li neke dovele do gubitka podataka.
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}");
}Uobičajeni problemi i popravci
XmlParsingException čak i s TryRepairXml = true.
XML je toliko oštećen da parser otporan na greške ne može ga oporaviti. To se može dogoditi s datotekama koje su stvorili nestandardni alati koji proizvode sintaktički neispravan XML. Za ove datoteke ne postoji put oporavka.
Stilovi nedostaju nakon učitavanja.
StylesheetXmlMapper možda je naišao na oštećeni xl/styles.xml. Provjerite LoadDiagnostics.Issues za unose s kodom vezanim uz stilove i DataLossRisk = true za pogođene ćelije.
Dijeljeni nizovi pojavljuju se kao prazne ćelije.
Oštećeni xl/sharedStrings.xml može uzrokovati da se ćelije koje referenciraju tablicu dijeljenih nizova prikazuju kao prazne. Omogućite TryRepairXml kako biste pokušali oporaviti.
Često postavljana pitanja
Mogu li implementirati prilagođeni XML mapper?
Ne. XML mapper klase su zatvorena interna infrastruktura i nisu dizajnirane za proširenje.
Zašto je SharedStringTableXmlMapper odvojeno?
Specifikacija OOXML razdvaja ponovljene string vrijednosti u zajedničku tablicu stringova kako bi smanjila veličinu datoteke. Mapper obrađuje čitanje i pisanje ove tablice neovisno o podacima ćelija.
Popravlja li TryRepairXml sve XML probleme parsiranja?
TryRepairXml obrađuje oporavljive pogreške poput nezatvorenih elemenata, nedostajućih prostora imena i skraćenih vrijednosti atributa. Strukturno valjan, ali semantički nekonzistentan XML (npr. tokeni formule koji referenciraju nepostojeće ćelije) i dalje će se parsirati bez pogreške.