Wie man mit XML-Verarbeitung in .NET arbeitet

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_FOSS

Schritt 2: Namespace importieren

using Aspose.Cells_FOSS;

Schritt 3: Verstehen Sie die XML-Mapper-Verantwortlichkeiten

Jeder Mapper verarbeitet einen XML‑Teil der XLSX‑Struktur:

MapperXML-TeilVerarbeitet
WorkbookXmlMapperxl/workbook.xmlArbeitsmappen-Metadaten, Blattliste, definierte Namen
WorksheetXmlMapperxl/worksheets/sheetN.xmlZellendaten, Formeln, Hyperlinks, Validierungen, bedingte Formatierungen
SharedStringTableXmlMapperxl/sharedStrings.xmlDeduplizierte Zeichenkettenwerte
StylesheetXmlMapperxl/styles.xmlZellstile, 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 Zellen­daten.

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.

Siehe auch

 Deutsch