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_FOSSVaihe 2: Tuo nimiavaruus
using Aspose.Cells_FOSS;Vaihe 3: Ymmärrä XML Mapperin vastuut
Jokainen mapperi käsittelee yhtä XML-osaa XLSX-rakenteesta:
| Kartoitin | XML-osa | Käsittelee |
|---|---|---|
WorkbookXmlMapper | xl/workbook.xml | Työkirjan metatiedot, taulukkolista, määritetyt nimet |
WorksheetXmlMapper | xl/worksheets/sheetN.xml | Solutiedot, kaavat, hyperlinkit, validoinnit, ehdolliset muotoilut |
SharedStringTableXmlMapper | xl/sharedStrings.xml | Duplikaattien poistamat merkkijonoarvot |
StylesheetXmlMapper | xl/styles.xml | Solutyylit, 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ä.