Kaip dirbti su XML apdorojimu .NET
XLSX failai saugo savo duomenis XML dalyse OPC ZIP pakete. Aspose.Cells FOSS for .NET apdoroja juos per keturias XML žemėlapių klases: WorkbookXmlMapper, WorksheetXmlMapper, SharedStringTableXmlMapper, ir StylesheetXmlMapper. Šių klasių supratimas padeda diagnozuoti analizės klaidas ir teisingai konfigūruoti gedimų tolerantišką įkėlimą. Įdiekite naudodami dotnet add package Aspose.Cells_FOSS.
Žingsnis po žingsnio vadovas
Žingsnis 1: Įdiekite paketą
dotnet add package Aspose.Cells_FOSSŽingsnis 2: importuoti vardų sritį
using Aspose.Cells_FOSS;Žingsnis 3: Suprasti XML mapperio atsakomybes
Kiekvienas mapperis tvarko vieną XML dalį XLSX struktūroje:
| Mapper | XML Part | Handles |
|---|---|---|
WorkbookXmlMapper | xl/workbook.xml | Darbalapio metaduomenys, lakštų sąrašas, apibrėžti vardai |
WorksheetXmlMapper | xl/worksheets/sheetN.xml | Ląstelių duomenys, formulės, hipersaitai, patikrinimai, sąlyginiai formatai |
SharedStringTableXmlMapper | xl/sharedStrings.xml | Pašalintos dublikato eilutės reikšmės |
StylesheetXmlMapper | xl/styles.xml | Ląstelių stiliai, šriftai, užpildai, kraštinės |
Šie mapperiai yra iškviečiami automatiškai Workbook kūrimo metu ir Save(). Jūs jų neinstancijuojate tiesiogiai programos kode.
Žingsnis 4: Tvarkyti XmlParsingException
XmlParsingException išmetamas, kai mapperis susiduria su neteisingu XML, kurio negalima pataisyti. Įjunkite TryRepairXml = true per LoadOptions, kad aktyvuotumėte mapperio klaidų tolerantišką analizės kelią.
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);
}Žingsnis 5: naudokite LoadDiagnostics, kad identifikuotumėte XML problemas
Po sėkmingo įkėlimo patikrinkite LoadDiagnostics.Issues dėl DiagnosticEntry įrašų, kad suprastumėte, kurie XML taisymai buvo pritaikyti ir ar kurie nors sukėlė duomenų praradimą.
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}");
}Dažnos problemos ir sprendimai
XmlParsingException net su TryRepairXml = true.
XML yra toks netinkamai suformuotas, kad klaidų tolerantiškas analizatorius jo negali atkurti. Tai gali įvykti su failais, sukurtų nestandartiniais įrankiais, kurie generuoja sintaksiškai neteisingą XML. Šiems failams nėra atkūrimo kelio.
Stiliai trūksta po įkėlimo.StylesheetXmlMapper gali būti susidūręs su sugadintu xl/styles.xml. Patikrinkite LoadDiagnostics.Issues įrašus, susijusius su stiliais, ir DataLossRisk = true paveiktas ląsteles.
Bendri eilutės rodomi kaip tušti langeliai.
Sugadintas xl/sharedStrings.xml gali sukelti, kad langeliai, kurie nurodo bendrą eilutės lentelę, būtų rodomi kaip tušti. Įjunkite TryRepairXml, kad bandytumėte atkurti.
Dažnai užduodami klausimai
Ar galiu įgyvendinti pasirinktą XML mapper?
Ne. XML mapper klasės yra uždarytos vidinės infrastruktūros ir nėra sukurtos plėtiniui.
Kodėl SharedStringTableXmlMapper yra atskiras?
OOXML specifikacija atskiria pasikartojančias eilutės reikšmes į bendrą eilutės lentelę, kad sumažintų failo dydį. Mapper tvarko šios lentelės skaitymą ir rašymą nepriklausomai nuo ląstelių duomenų.
Ar TryRepairXml išsprendžia visas XML analizės problemas?
TryRepairXml tvarko atstatomus klaidas, tokias kaip neuždaryti elementai, trūkstamos vardų erdvės ir sutrumpintos atributo reikšmės. Struktūriškai teisingas, bet semantiškai nesuderinamas XML (pvz., formulės tokenai, nurodantys neegzistuojančius langelius) vis tiek bus analizuojamas be klaidos.