Kuinka työskennellä XML‑käsittelyn kanssa .NETissä

Kuinka työskennellä XML‑käsittelyn kanssa .NETissä

XLSX‑tiedostot tallentavat tietonsa XML‑osioina OPC ZIP -paketissa. Aspose.Cells FOSS for .NET käsittelee näitä neljän XML‑mapper‑luokan kautta: WorkbookXmlMapper, WorksheetXmlMapper, SharedStringTableXmlMapper, ja StylesheetXmlMapper. Näiden luokkien ymmärtäminen auttaa sinua diagnosoimaan jäsentämisvirheitä ja konfiguroimaan oikein vikakestävän latauksen. Asenna dotnet add package Aspose.Cells_FOSS.

Vaiheittainen opas

Vaihe 1: Asenna paketti

dotnet add package Aspose.Cells_FOSS

Vaihe 2: Tuo nimiavaruus

using Aspose.Cells_FOSS;

Vaihe 3: Ymmärrä XML Mapperin vastuut

Jokainen mapperi käsittelee yhtä XML-osaa XLSX-rakenteesta:

KartoitinXML-osaKäsittelee
WorkbookXmlMapperxl/workbook.xmlTyökirjan metatiedot, taulukkolista, määritetyt nimet
WorksheetXmlMapperxl/worksheets/sheetN.xmlSolutiedot, kaavat, hyperlinkit, validoinnit, ehdolliset muotoilut
SharedStringTableXmlMapperxl/sharedStrings.xmlDuplikaattien poistamat merkkijonoarvot
StylesheetXmlMapperxl/styles.xmlSolutyylit, fontit, täytöt, reunat

Nämä mapperit kutsutaan automaattisesti Workbook-rakennuksen ja Save() aikana. Et luo niitä suoraan sovelluskoodissa.


Vaihe 4: Käsittele XmlParsingException

XmlParsingException heitetään, kun mapper kohtaa virheellisesti muodostetun XML:n, jota ei voida korjata. Ota TryRepairXml = true käyttöön LoadOptions:ssa aktivoidaksesi mapperin vikakestävän jäsentämispolun.

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);
}

Vaihe 5: Käytä LoadDiagnostics-ominaisuutta XML-ongelmien tunnistamiseen

Kun lataus on onnistunut, tarkista LoadDiagnostics.Issues DiagnosticEntry-tietueista ymmärtääksesi, mitä XML-korjauksia on sovellettu ja johtuiko niistä tietojen menetystä.

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}");
}

Yleiset ongelmat ja korjaukset

XmlParsingException jopa TryRepairXml = true.
XML on niin virheellinen, että vikasietoinen jäsentäjä ei pysty palauttamaan sitä. Tämä voi tapahtua tiedostoissa, jotka on luotu epästandardeilla työkaluilla, jotka tuottavat syntaktisesti virheellistä XML:ää. Näille tiedostoille ei ole palautumispolkua.

Tyylit puuttuvat latauksen jälkeen.
StylesheetXmlMapper saattaa olla kohdannut vioittuneen xl/styles.xml. Tarkista LoadDiagnostics.Issues merkinnöistä, jotka liittyvät tyyleihin, ja DataLossRisk = true vaikuttavista soluista.

Jaetut merkkijonot näkyvät tyhjinä soluina.
Vaurioitunut xl/sharedStrings.xml voi aiheuttaa sen, että solut, jotka viittaavat jaetun merkkijonotauluun, renderöityvät tyhjiksi. Ota käyttöön TryRepairXml yrittääksesi palauttaa.

Usein kysytyt kysymykset

Voinko toteuttaa mukautetun XML-mapperin?

Ei. XML-mapper-luokat ovat suljettu sisäinen infrastruktuuri, eikä niitä ole suunniteltu laajennettaviksi.

Miksi SharedStringTableXmlMapper on erillinen?

OOXML-määritys erottaa toistuvat merkkijonoarvot jaettuun merkkijonotaulukkoon tiedostokoon pienentämiseksi. Mapper käsittelee tämän taulukon lukemisen ja kirjoittamisen itsenäisesti solutiedoista.

Korjaako TryRepairXml kaikki XML-parsintaongelmat?

TryRepairXml käsittelee palautettavissa olevia virheitä, kuten sulkemattomia elementtejä, puuttuvia nimiavaruuksia ja katkenneita attribuuttiarvoja. Rakenneellisesti kelvollinen, mutta semanttisesti epäjohdonmukainen XML (esim. kaavatokenit, jotka viittaavat olemattomiin soluihin) jäsentyy edelleen ilman virhettä.

Katso myös

 Suomi