Praca z XML Processing
Praca z przetwarzaniem XML
Pliki XLSX przechowują swoje dane w częściach XML wewnątrz pakietu OPC. Aspose.Cells FOSS dla .NET udostępnia warstwę parsowania i serializacji XML poprzez cztery klasy mapperów: WorkbookXmlMapper, WorksheetXmlMapper, SharedStringTableXmlMapper i StylesheetXmlMapper. Każdy mapper implementuje zarówno operacje Read, jak i Write dla odpowiadającej mu części XML. Są to wewnętrzne API infrastrukturalne — większość kodu aplikacji działa wyłącznie poprzez obiekty Workbook i Worksheet.
XML Klasy mapperów
Każdy mapper XML jest odpowiedzialny za jedną część XML struktury XLSX:
| Mapper | XML część | Responsibility |
|---|---|---|
WorkbookXmlMapper | xl/workbook.xml | Metadane na poziomie skoroszytu, odwołania do arkuszy, nazwy zdefiniowane |
WorksheetXmlMapper | xl/worksheets/sheetN.xml | Dane komórek, formuły, hiperłącza, formaty warunkowe, walidacja danych |
SharedStringTableXmlMapper | xl/sharedStrings.xml | Wspólna tabela ciągów dla odduplikowanych wartości ciągów |
StylesheetXmlMapper | xl/styles.xml | Style komórek, czcionki, wypełnienia, obramowania, formaty liczb |
Każdy mapper udostępnia dwie metody — Read i Write — wywoływane odpowiednio przez potoki ładowania i zapisu biblioteki.
XmlParsingException
XmlParsingException jest zgłaszany, gdy mapper napotyka uszkodzony XML, którego nie można naprawić. Jest podnoszony przed WorkbookLoadException w hierarchii błędów, gdy awaria występuje konkretnie podczas parsowania XML.
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)");
}
catch (XmlParsingException ex)
{
Console.WriteLine("XML parse error: " + ex.Message);
}
catch (WorkbookLoadException ex)
{
Console.WriteLine("Load error: " + ex.Message);
}Wskazówki i najlepsze praktyki
- Ustaw
TryRepairXml = truewLoadOptions, aby włączyć tolerancyjną na błędy ścieżkę parsowania mapera. - Przechwytuj
XmlParsingExceptionopróczWorkbookLoadExceptionprzy obsłudze plików z zewnętrznych systemów, które mogą generować nieprawidłowe XML. - Klasy mapera XML nie są przeznaczone do tworzenia przez kod aplikacji — są wywoływane automatycznie podczas konstrukcji
WorkbookiSave(). - Jeśli potrzebujesz zbadać surową zawartość XML w celach diagnostycznych, wyodrębnij plik XLSX jako ZIP i bezpośrednio przeanalizuj odpowiednie części XML.
Typowe problemy
| Problem | Przyczyna | Poprawka |
|---|---|---|
XmlParsingException przy ładowaniu | Nieprawidłowy XML w jednej z części XLSX | Ustaw TryRepairXml = true w LoadOptions |
| Brak stylów po dwukierunkowym przetworzeniu | StylesheetXmlMapper nie mógł przetworzyć rekordu niestandardowego stylu | Sprawdź LoadDiagnostics.Issues pod kątem wpisów naprawczych związanych ze stylami |
| Brak współdzielonych ciągów w załadowanym pliku | SharedStringTableXmlMapper napotkał uszkodzoną tabelę współdzielonych ciągów | Włącz TryRepairXml; sprawdź, czy oryginalny plik ma prawidłowy xl/sharedStrings.xml |
FAQ
Czy mogę zaimplementować własny XML mapper?
Klasy mapperów XML są zamkniętą wewnętrzną infrastrukturą. Niestandardowe maperki nie są obsługiwane w bieżącej powierzchni API.
Dlaczego istnieje oddzielny SharedStringTableXmlMapper?
Specyfikacja OOXML oddziela wartości tekstowe do wspólnej tabeli ciągów (xl/sharedStrings.xml), aby usunąć duplikaty powtarzających się ciągów w całym skoroszycie. Mapper obsługuje odczyt i zapis tej tabeli niezależnie.
Czy TryRepairXml = true naprawia wszystkie problemy XML?
TryRepairXml obsługuje problemy możliwe do naprawy, takie jak niezamknięte elementy, brakujące przestrzenie nazw i obcięte wartości. Strukturalnie poprawne, ale semantycznie niezgodne XML (np. uszkodzone odwołania do formuł) mogą nadal powodować XmlParsingException.
API Reference Podsumowanie
| Klasa | Opis |
|---|---|
WorkbookXmlMapper | Odczytuje/zapisuje xl/workbook.xml |
WorksheetXmlMapper | Odczytuje/zapisuje na arkusz XML części |
SharedStringTableXmlMapper | Odczytuje/zapisuje xl/sharedStrings.xml |
StylesheetXmlMapper | Odczytuje/zapisuje xl/styles.xml |
XmlParsingException | Rzucany w przypadku nieodwracalnych błędów parsowania XML |