Kaip dirbti su XML apdorojimu .NET

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:

MapperXML PartHandles
WorkbookXmlMapperxl/workbook.xmlDarbalapio metaduomenys, lakštų sąrašas, apibrėžti vardai
WorksheetXmlMapperxl/worksheets/sheetN.xmlLąstelių duomenys, formulės, hipersaitai, patikrinimai, sąlyginiai formatai
SharedStringTableXmlMapperxl/sharedStrings.xmlPašalintos dublikato eilutės reikšmės
StylesheetXmlMapperxl/styles.xmlLą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.

Žr. taip pat

 Lietuvių