Hoe te werken met XML-verwerking in .NET
XLSX-bestanden slaan hun gegevens op in XML-onderdelen binnen een OPC ZIP-pakket. Aspose.Cells FOSS voor .NET verwerkt deze via vier XML-mapperklassen: WorkbookXmlMapper, WorksheetXmlMapper, SharedStringTableXmlMapper, en StylesheetXmlMapper. Het begrijpen van deze klassen helpt u bij het diagnosticeren van parsefouten en het correct configureren van fouttolerant laden. Installeer met dotnet add package Aspose.Cells_FOSS.
Stapsgewijze handleiding
Stap 1: Installeer het pakket
dotnet add package Aspose.Cells_FOSSStap 2: Importeer de Namespace
using Aspose.Cells_FOSS;Stap 3: Begrijp de verantwoordelijkheden van de XML Mapper
Elke mapper verwerkt één XML-gedeelte van de XLSX-structuur:
| Mapper | XML-gedeelte | Behandelt |
|---|---|---|
WorkbookXmlMapper | xl/workbook.xml | Werkboekmetadata, bladlijst, gedefinieerde namen |
WorksheetXmlMapper | xl/worksheets/sheetN.xml | Celgegevens, formules, hyperlinks, validaties, voorwaardelijke opmaak |
SharedStringTableXmlMapper | xl/sharedStrings.xml | Gededupliceerde tekenreekswaarden |
StylesheetXmlMapper | xl/styles.xml | Celstijlen, lettertypen, vullingen, randen |
Deze mappers worden automatisch aangeroepen tijdens Workbook constructie en Save(). U maakt ze niet direct aan in de toepassingscode.
Stap 4: XmlParsingException afhandelen
XmlParsingException wordt gegooid wanneer een mapper slecht gevormde XML tegenkomt die niet kan worden gerepareerd. Schakel TryRepairXml = true in LoadOptions in om het fouttolerante parsepad van de mapper te activeren.
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);
}Stap 5: Gebruik LoadDiagnostics om XML‑problemen te identificeren
Na een succesvolle load, controleer LoadDiagnostics.Issues op DiagnosticEntry records om te begrijpen welke XML‑reparaties zijn toegepast en of er enige gegevensverlies is opgetreden.
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}");
}Veelvoorkomende problemen en oplossingen
XmlParsingException even with TryRepairXml = true.
De XML is zo misvormd dat de fouttolerante parser deze niet kan herstellen. Dit kan gebeuren met bestanden die zijn gemaakt door niet‑standaard tools die syntactisch ongeldige XML produceren. Er is geen herstelpad voor deze bestanden.
Stijlen ontbreken na het laden.
De StylesheetXmlMapper kan een beschadigd xl/styles.xml hebben aangetroffen. Controleer LoadDiagnostics.Issues op items met code gerelateerd aan stijlen, en DataLossRisk = true voor getroffen cellen.
Shared strings appear as empty cells.
Een corrupte xl/sharedStrings.xml kan ervoor zorgen dat cellen die naar de gedeelde tekenreeks‑tabel verwijzen als leeg worden weergegeven. Schakel TryRepairXml in om herstel te proberen.
Veelgestelde vragen
Kan ik een aangepaste XML-mapper implementeren?
Nee. De XML mapper classes zijn sealed internal infrastructure en zijn niet ontworpen voor extensie.
Waarom is de SharedStringTableXmlMapper gescheiden?
De OOXML-specificatie scheidt herhaalde tekenreekswaarden in een shared string table om de bestandsgrootte te verkleinen. De mapper verwerkt het lezen en schrijven van deze tabel onafhankelijk van de celgegevens.
Lost TryRepairXml alle XML-parseproblemen op?
TryRepairXml behandelt herstelbare fouten zoals niet‑gesloten elementen, ontbrekende namespaces en afgekorte attribuutwaarden. Structureel geldige maar semantisch inconsistente XML (bijv. formule‑tokens die verwijzen naar niet‑bestaande cellen) zal nog steeds zonder fout worden geparseerd.