Kā strādāt ar XML apstrādi .NET
XLSX faili glabā savus datus XML daļās OPC ZIP pakotnē. Aspose.Cells FOSS priekš .NET apstrādā tos caur četrām XML kartētāja klasēm: WorkbookXmlMapper, WorksheetXmlMapper, SharedStringTableXmlMapper, un StylesheetXmlMapper. Izpratne par šīm klasēm palīdz diagnosticēt parsēšanas kļūdas un pareizi konfigurēt kļūdu‑tolerantu ielādi. Instalējiet ar dotnet add package Aspose.Cells_FOSS.
Solim pa solim ceļvedis
1. solis: instalēt pakotni
dotnet add package Aspose.Cells_FOSS2. solis: Importēt vārdtelpu
using Aspose.Cells_FOSS;3. solis: Izprast XML kartētāja atbildības
Katrs kartētājs apstrādā vienu XML daļu XLSX struktūrā:
| Mapper | XML Part | Apstrādā |
|---|---|---|
WorkbookXmlMapper | xl/workbook.xml | Darblapas metadati, lapu saraksts, definētie nosaukumi |
WorksheetXmlMapper | xl/worksheets/sheetN.xml | Šūnu dati, formulas, hipersaites, validācijas, nosacītie formatējumi |
SharedStringTableXmlMapper | xl/sharedStrings.xml | No dublikātiem attīrītas virkņu vērtības |
StylesheetXmlMapper | xl/styles.xml | Šūnas stili, fonti, aizpildījumi, robežas |
Šie kartētāji tiek izsaukti automātiski laikā Workbook konstrukcija un Save(). Jūs tos neinstancējat tieši lietojumprogrammas kodā.
4. solis: Apstrādāt XmlParsingException
XmlParsingException tiek izsviests, kad kartētājs sastop nepareizu XML, ko nevar salabot. Iespējiet TryRepairXml = true iekš LoadOptions lai aktivizētu kartētāja kļūdu-toleranto parsēšanas ceļu.
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);
}5. solis: Izmantojiet LoadDiagnostics, lai identificētu XML problēmas
Pēc veiksmīgas ielādes pārbaudiet LoadDiagnostics.Issues par DiagnosticEntry ierakstus, lai saprastu, kuri XML labojumi tika piemēroti un vai kāds no tiem izraisīja datu zudumu.
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}");
}Biežāk sastopamās problēmas un to risinājumi
XmlParsingException pat ar TryRepairXml = true. XML ir tik nepareizi veidots, ka kļūdu‑tolerējošais parsētājs to nevar atgūt. Tas var notikt ar failiem, kas izveidoti ar nestandarta rīkiem, kuri rada sintaktiski nederīgus XML. Šiem failiem nav atgūšanas ceļa.
Stili trūkst pēc ielādes. Šis StylesheetXmlMapper var būt saskāries ar bojātu xl/styles.xml. Pārbaudiet LoadDiagnostics.Issues ierakstus, kuri satur kodu, kas saistīts ar stiliem, un DataLossRisk = true ietekmētajām šūnām.
Koplietotās virknes parādās kā tukšas šūnas. Bojāts xl/sharedStrings.xml var izraisīt, ka šūnas, kas atsaucas uz koplietoto virkņu tabulu, tiek attēlotas kā tukšas. Iespējot TryRepairXml lai mēģinātu atgūšanu.
Biežāk uzdotie jautājumi
Vai es varu izveidot pielāgotu XML kartētāju?
Nē. XML kartētāja klases ir noslēgtas iekšējās infrastruktūras daļas un nav paredzētas paplašināšanai.
Kāpēc ir SharedStringTableXmlMapper atsevišķs?
OOXML specifikācija sadala atkārtotas virknes vērtības koplietotajā virkņu tabulā, lai samazinātu faila lielumu. Kartētājs apstrādā šīs tabulas lasīšanu un rakstīšanu neatkarīgi no šūnu datiem.
Vai TryRepairXml novērst visas XML parsēšanas problēmas?
TryRepairXml apstrādā atgūstamas kļūdas, piemēram, neatvērtus elementus, trūkstošas vārdtelpas un saīsinātas atribūtu vērtības. Strukturāli derīgi, bet semantiski nekonsekventi XML (piemēram, formulas tokeni, kas atsaucas uz neeksistējošām šūnām) joprojām tiks parsēti bez kļūdām.