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_FOSSKrok 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:
| Mapownik | Część XML | Obsługuje |
|---|---|---|
WorkbookXmlMapper | xl/workbook.xml | Metadane skoroszytu, lista arkuszy, nazwy zdefiniowane |
WorksheetXmlMapper | xl/worksheets/sheetN.xml | Dane komórek, formuły, hiperłącza, walidacje, formaty warunkowe |
SharedStringTableXmlMapper | xl/sharedStrings.xml | Wartości ciągów bez duplikatów |
StylesheetXmlMapper | xl/styles.xml | Style 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.