Praca z XML Processing
Praca z przetwarzaniem XML
Aspose.Cells FOSS dla C++ używa lekkiej wewnętrznej warstwy XML, aby odczytywać i zapisywać części Open XML składające się na plik XLSX. Klasy XmlDocument, XmlElement i XmlAttribute tworzą rdzeń tej warstwy.
Wczytywanie dokumentu XML
Użyj XmlDocument::Load, aby przetworzyć ciąg lub plik XML na drzewo dokumentu w pamięci:
#include "aspose/cells_foss/XmlDocument.h"
using namespace Aspose::Cells_FOSS;
// Load from string content
XmlDocument doc;
doc.Load("<root><item key=\"a\">value</item></root>");Budowanie i zapisywanie XML
Użyj XmlDocument::Build, aby programowo skonstruować dokument XML, oraz XmlDocument::SaveToUtf8, aby zserializować go z powrotem do ciągu UTF-8:
XmlDocument doc;
// Build the document structure
auto xml = doc.SaveToUtf8();Przeglądanie elementów
XmlElement zapewnia lekkie, oparte na uchwycie, dostęp do wartości elementów, ich dzieci i atrybutów. Elementy tworzone domyślnie zwracają IsNull() == true, które mogą być użyte jako bezpieczne sprawdzenie null:
XmlElement root = doc.GetRootElement();
if (!root.IsNull()) {
// Traverse children via GetAttributes
auto attrs = root.GetAttributes();
}Praca z atrybutami
XmlAttribute zapewnia dostęp do par nazw i wartości atrybutów w elemencie. Użyj XmlAttribute::MakeAttribute(name, value), aby utworzyć nowe atrybuty:
XmlAttribute attr = XmlAttribute::MakeAttribute("key", "value");
bool isNull = attr.IsNull();Wewnętrzne mapery XML
Biblioteka używa dedykowanych klas mapperów do konwertowania obiektów modelu arkusza kalkulacyjnego w pamięci na ich reprezentacje XML i z nich. Są one wewnętrzne dla warstwy serializacji:
| Klasa Mapper | Responsibility |
|---|---|
WorkbookXmlMapper | Odczytuje i zapisuje część relacji skoroszytu |
WorksheetXmlMapper | Odczytuje i zapisuje poszczególne części arkusza XML |
StylesheetXmlMapper | Odczytuje i zapisuje część stylów |
SharedStringTableXmlMapper | Odczytuje i zapisuje tabelę współdzielonych ciągów |
Każdy mapper udostępnia metody Read i Write. Są one wywoływane wewnętrznie przez XlsxWorkbookSerializer i nie są przeznaczone do bezpośredniego użycia w kodzie aplikacji.
Obsługa błędów
XML błędy parsowania rzucają XmlParsingException. Przechwyć ten wyjątek podczas ładowania nieufnych lub niepoprawnych XML:
try {
doc.Load(xmlContent);
} catch (const XmlParsingException& ex) {
// Handle parse error
}Wskazówki i najlepsze praktyki
- Sprawdź
XmlElement::IsNull()przed dostępem do danych elementu — elementy w brakujących ścieżkach zwracają pusty uchwyt. - Użyj
XmlDocument::SaveToUtf8(), aby uzyskać zserializowany ciąg znaków do debugowania lub logowania pośredniego stanu XML. - Nie twórz instancji klas mapujących (
WorkbookXmlMapper,WorksheetXmlMapperitp.) bezpośrednio w kodzie aplikacji — zamiast tego użyjWorkbook::SaveiWorkbook(filePath). XmlParsingExceptionjest zgłaszany przy nieprawidłowym XML; zawsze otaczaj ładowania zewnętrznych XML w blok try/catch.
Typowe problemy
| Problem | Przyczyna | Poprawka |
|---|---|---|
IsNull() zwraca true | Element nie został znaleziony w oczekiwanej ścieżce | Zweryfikuj strukturę XML przed przejściem |
XmlParsingException przy ładowaniu | Nieprawidłowy lub nie-UTF-8 XML | Sprawdź poprawność wejściowego XML przed przekazaniem do Load |
| Wyjście mapera różni się od wejścia | Modyfikacja modelu przed zapisem | Upewnij się, że wszystkie zmiany modelu zostały zatwierdzone przed wywołaniem Save |
Podsumowanie API Reference
| Klasa/Metoda | Opis |
|---|---|
XmlDocument::Load(content) | Parsuj ciąg XML |
XmlDocument::Build() | Utwórz dokument programowo |
XmlDocument::SaveToUtf8() | Serializuj dokument do ciągu UTF-8 |
XmlElement::IsNull() | Sprawdź, czy uchwyt elementu jest prawidłowy |
XmlElement::GetValue() | Pobierz zawartość tekstową elementu |
XmlElement::GetAttributes() | Pobierz kolekcję atrybutów |
XmlAttribute::IsNull() | Sprawdź, czy uchwyt atrybutu jest prawidłowy |
XmlAttribute::MakeAttribute(name, value) | Utwórz nowy uchwyt atrybutu |
XmlParsingException | Rzucane przy nieprawidłowym wejściu XML |
WorksheetXmlMapper | Wewnętrzny arkusz XML odczyt/zapis |
WorkbookXmlMapper | Wewnętrzny skoroszyt XML odczyt/zapis |