Jak pracować z przetwarzaniem XML w .NET

Jak pracować z przetwarzaniem XML w .NET

Pliki XLSX przechowują swoje dane w częściach XML wewnątrz pakietu OPC ZIP. Aspose.Cells FOSS for .NET przetwarza je za pomocą czterech klas mapujących XML: WorkbookXmlMapper, WorksheetXmlMapper, SharedStringTableXmlMapper i StylesheetXmlMapper. Zrozumienie tych klas pomaga diagnozować błędy parsowania i prawidłowo konfigurować ładowanie odporne na błędy. Zainstaluj przy użyciu dotnet add package Aspose.Cells_FOSS.

Przewodnik krok po kroku

Krok 1: Zainstaluj pakiet

dotnet add package Aspose.Cells_FOSS

Krok 2: Importuj przestrzeń nazw

using Aspose.Cells_FOSS;

Krok 3: Zrozumienie obowiązków mapera XML

Każdy mapper obsługuje jedną część XML struktury XLSX:

MapownikCzęść XMLObsługuje
WorkbookXmlMapperxl/workbook.xmlMetadane skoroszytu, lista arkuszy, nazwy zdefiniowane
WorksheetXmlMapperxl/worksheets/sheetN.xmlDane komórek, formuły, hiperłącza, walidacje, formaty warunkowe
SharedStringTableXmlMapperxl/sharedStrings.xmlWartości ciągów bez duplikatów
StylesheetXmlMapperxl/styles.xmlStyle komórek, czcionki, wypełnienia, obramowania

Te mappery są wywoływane automatycznie podczas konstrukcji Workbook i Save(). Nie tworzysz ich bezpośrednio w kodzie aplikacji.


Krok 4: Obsłuż XmlParsingException

XmlParsingException jest zgłaszany, gdy mapper napotyka nieprawidłowy XML, którego nie można naprawić. Włącz TryRepairXml = true w LoadOptions, aby aktywować ścieżkę parsowania tolerującego błędy mappera.

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);
}

Krok 5: Użyj LoadDiagnostics, aby zidentyfikować problemy XML

Po pomyślnym załadowaniu sprawdź LoadDiagnostics.Issues pod kątem rekordów DiagnosticEntry, aby zrozumieć, które naprawy XML zostały zastosowane i czy któreś z nich spowodowały utratę danych.

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}");
}

Typowe problemy i rozwiązania

XmlParsingException nawet przy TryRepairXml = true.
XML jest tak zniekształcony, że parser odporny na błędy nie może go odzyskać. Może to zdarzyć się w przypadku plików tworzonych przez niestandardowe narzędzia, które generują składniowo nieprawidłowy XML. Nie ma ścieżki odzyskiwania dla tych plików.

Style zniknęły po załadowaniu.
StylesheetXmlMapper mogło napotkać uszkodzony xl/styles.xml. Sprawdź LoadDiagnostics.Issues pod kątem wpisów z kodem związanym ze stylami oraz DataLossRisk = true pod kątem dotkniętych komórek.

Udostępnione ciągi pojawiają się jako puste komórki.
Uszkodzony xl/sharedStrings.xml może powodować, że komórki odwołujące się do tabeli udostępnionych ciągów są wyświetlane jako puste. Włącz TryRepairXml, aby spróbować odzyskać.

Najczęściej zadawane pytania

Czy mogę zaimplementować własny mapper XML?

Nie. Klasy mapera XML są zamkniętą wewnętrzną infrastrukturą i nie są przeznaczone do rozszerzania.

Dlaczego SharedStringTableXmlMapper jest oddzielny?

Specyfikacja OOXML oddziela powtarzające się wartości tekstowe w tabeli łańcuchów współdzielonych, aby zmniejszyć rozmiar pliku. Mapper obsługuje odczyt i zapis tej tabeli niezależnie od danych komórek.

Czy TryRepairXml naprawia wszystkie problemy z parsowaniem XML?

TryRepairXml obsługuje odzyskiwalne błędy, takie jak niezamknięte elementy, brakujące przestrzenie nazw i obcięte wartości atrybutów. Strukturalnie poprawny, ale semantycznie niespójny XML (np. tokeny formuł odwołujące się do nieistniejących komórek) nadal będzie parsowany bez błędu.

Zobacz także

 Polski