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 durch vier XML Mapperklassen: WorkbookXmlMapper, WorksheetXmlMapper, SharedStringTableXmlMapper,und . StylesheetXmlMapper.Das Verständnis dieser Klassen hilft Ihnen, Fehler bei der Analyse zu diagnostizieren und das fehlertolerante Laden korrekt einzurichten. Installieren Sie mit dotnet add package Aspose.Cells_FOSS.
Schritt für Schritte
Schritt 1: Installieren des Pakets
dotnet add package Aspose.Cells_FOSSSchritt 2: Importieren des Namensraums
using Aspose.Cells_FOSS;Schritt 3: Verstehen der XML-Mapper-Verantwortlichkeiten
Jeder Mapper behandelt einen XML-Teil der XLSX-Struktur:
| Kartenrechner | XML-Teil | Handgriffe |
|---|---|---|
WorkbookXmlMapper | xl/workbook.xml | Arbeitsbücher-Metadaten, Liste der Blätter und definierte Namen |
WorksheetXmlMapper | xl/worksheets/sheetN.xml | Zelldaten, Formeln, Hyperlinks, Validierungen und bedingte Formate |
SharedStringTableXmlMapper | xl/sharedStrings.xml | De-duplizierte Zeichenfolgewerte |
StylesheetXmlMapper | xl/styles.xml | Zellstile, Schriften, Füllungen und Randschnitte |
Diese Mapper werden während der Workbook Bau und Save().Sie instanzieren sie nicht direkt in Anwendungscode.
Schritt 4: XmlParsingException verwalten
XmlParsingException wird geworfen, wenn ein Mapper auf fehlerhafte XML trifft, die nicht repariert werden kann. Aktivieren TryRepairXml = true in der 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: LoadDiagnostics verwenden, um XML-Probleme zu identifizieren
Nach erfolgreicher Ladung überprüfen Sie die LoadDiagnostics.Issues für die DiagnosticEntry Aufzeichnungen, um zu verstehen, welche XML-Reparaturen durchgeführt wurden und ob Datenverluste entstanden sind.
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 auch mit TryRepairXml = true. Das XML ist so fehlerhaft, dass der Fehler-Toleranz-Parser es nicht wiederherstellen kann. Dies kann bei Dateien geschehen, die von Nichtstandardwerkzeugen erstellt wurden und syntaktisch ungültiges XML produzieren. Es gibt keinen Wiederherstellungsweg für diese Daten.
Styles fehlen nach der Ladung. Die StylesheetXmlMapper Sie haben vielleicht einen korrupten xl/styles.xml.- Die Scheckkarte . LoadDiagnostics.Issues für Eingaben mit Code, die sich auf Stile beziehen; und DataLossRisk = true für betroffene Zellen.
Geteilte Zeichenketten erscheinen als leere Zellen. Ein korrupter … xl/sharedStrings.xml kann dazu führen, dass Zellen, die auf die geteilte String-Tabelle verweisen, als leer dargestellt werden. Aktivieren TryRepairXml Erholung zu versuchen.
Häufig gestellte Fragen
Kann ich einen benutzerdefinierten XML-Mapper implementieren?
Nein. Die XML-Mapperklassen sind versiegelte interne Infrastrukturen und nicht für die Erweiterung konzipiert.
Warum ist die SharedStringTableXmlMapper - Trennend?
Die OOXML-Spezifikation trennt wiederholte Zeichenfolgewerte in eine gemeinsame Zeichenfolgentabelle, um die Dateigröße zu reduzieren. Der Mapper verarbeitet das Lesen und Schreiben dieser Tabelle unabhängig von Zelldaten.
Ist es so ? TryRepairXml alle XML-Parsingprobleme beheben?
TryRepairXml verarbeitet wiederherstellbare Fehler wie nicht geschlossene Elemente, fehlende Namensräume und abgeschnittenen Attributwerte. Strukturell gültiges aber semantisch inkonsistentes XML (z. B. Formel-Token mit Bezug auf nicht vorhandene Zellen) wird immer noch ohne Fehler analysiert.