Wie man mit XML-Verarbeitung in .NET arbeitet
XLSX-Dateien speichern ihre Daten in XML-Teilen innerhalb eines OPC‑ZIP‑Pakets. Aspose.Cells FOSS für .NET verarbeitet diese über vier XML‑Mapper‑Klassen: WorkbookXmlMapper, WorksheetXmlMapper, SharedStringTableXmlMapper und StylesheetXmlMapper. Das Verständnis dieser Klassen hilft Ihnen, Parsing‑Fehler zu diagnostizieren und das fehlertolerante Laden korrekt zu konfigurieren. Installieren Sie mit dotnet add package Aspose.Cells_FOSS.
Schritt-für-Schritt-Anleitung
Schritt 1: Paket installieren
dotnet add package Aspose.Cells_FOSSSchritt 2: Namespace importieren
using Aspose.Cells_FOSS;Schritt 3: Verstehen Sie die XML-Mapper-Verantwortlichkeiten
Jeder Mapper verarbeitet einen XML‑Teil der XLSX‑Struktur:
| Mapper | XML-Teil | Verarbeitet |
|---|---|---|
WorkbookXmlMapper | xl/workbook.xml | Arbeitsmappen-Metadaten, Blattliste, definierte Namen |
WorksheetXmlMapper | xl/worksheets/sheetN.xml | Zellendaten, Formeln, Hyperlinks, Validierungen, bedingte Formatierungen |
SharedStringTableXmlMapper | xl/sharedStrings.xml | Deduplizierte Zeichenkettenwerte |
StylesheetXmlMapper | xl/styles.xml | Zellstile, Schriftarten, Füllungen, Rahmen |
Diese Mapper werden automatisch während der Workbook‑Konstruktion und Save() aufgerufen. Sie instanziieren sie nicht direkt im Anwendungscode.
Schritt 4: XmlParsingException behandeln
XmlParsingException wird ausgelöst, wenn ein Mapper fehlerhaftes XML findet, das nicht repariert werden kann. Aktivieren Sie TryRepairXml = true in LoadOptions, um den fehlertoleranten Parsing‑Pfad des Mappers zu aktivieren.
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);
}Schritt 5: Verwenden Sie LoadDiagnostics, um XML‑Probleme zu identifizieren
Nach einem erfolgreichen Laden prüfen Sie LoadDiagnostics.Issues auf DiagnosticEntry Datensätze, um zu verstehen, welche XML‑Reparaturen angewendet wurden und ob dabei Datenverlust aufgetreten ist.
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}");
}Häufige Probleme und Lösungen
XmlParsingException sogar mit TryRepairXml = true. Das XML ist so fehlerhaft, dass der fehlertolerante Parser es nicht wiederherstellen kann. Das kann bei Dateien passieren, die von nicht standardisierten Werkzeugen erstellt wurden und syntaktisch ungültiges XML erzeugen. Für diese Dateien gibt es keinen Wiederherstellungsweg.
Stile fehlen nach dem Laden.
Der StylesheetXmlMapper könnte ein beschädigtes xl/styles.xml aufweisen. Überprüfen Sie LoadDiagnostics.Issues auf Einträge mit Code, der sich auf Stile bezieht, und DataLossRisk = true für betroffene Zellen.
Gemeinsame Zeichenfolgen erscheinen als leere Zellen.
Ein beschädigtes xl/sharedStrings.xml kann dazu führen, dass Zellen, die auf die gemeinsame Zeichenfolgentabelle verweisen, leer dargestellt werden. Aktivieren Sie TryRepairXml, um eine Wiederherstellung zu versuchen.
Häufig gestellte Fragen
Kann ich einen benutzerdefinierten XML-Mapper implementieren?
Nein. Die XML‑Mapper‑Klassen sind versiegelte interne Infrastruktur und sind nicht für Erweiterungen konzipiert.
Warum ist das SharedStringTableXmlMapper separat?
Die OOXML‑Spezifikation trennt wiederholte Zeichenkettenwerte in eine gemeinsam genutzte Zeichenkettentabelle, um die Dateigröße zu reduzieren. Der Mapper verarbeitet das Lesen und Schreiben dieser Tabelle unabhängig von den Zellendaten.
Behebt TryRepairXml alle XML-Parsing-Probleme?
TryRepairXml verarbeitet wiederherstellbare Fehler wie nicht geschlossene Elemente, fehlende Namespaces und abgeschnittene Attributwerte. Strukturell gültiges, aber semantisch inkonsistentes XML (z. B. Formeltoken, die sich auf nicht vorhandene Zellen beziehen) wird weiterhin fehlerfrei geparst.