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 MapperResponsibility
WorkbookXmlMapperOdczytuje i zapisuje część relacji skoroszytu
WorksheetXmlMapperOdczytuje i zapisuje poszczególne części arkusza XML
StylesheetXmlMapperOdczytuje i zapisuje część stylów
SharedStringTableXmlMapperOdczytuje 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, WorksheetXmlMapper itp.) bezpośrednio w kodzie aplikacji — zamiast tego użyj Workbook::Save i Workbook(filePath).
  • XmlParsingException jest zgłaszany przy nieprawidłowym XML; zawsze otaczaj ładowania zewnętrznych XML w blok try/catch.

Typowe problemy

ProblemPrzyczynaPoprawka
IsNull() zwraca trueElement nie został znaleziony w oczekiwanej ścieżceZweryfikuj strukturę XML przed przejściem
XmlParsingException przy ładowaniuNieprawidłowy lub nie-UTF-8 XMLSprawdź poprawność wejściowego XML przed przekazaniem do Load
Wyjście mapera różni się od wejściaModyfikacja modelu przed zapisemUpewnij się, że wszystkie zmiany modelu zostały zatwierdzone przed wywołaniem Save

Podsumowanie API Reference

Klasa/MetodaOpis
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
XmlParsingExceptionRzucane przy nieprawidłowym wejściu XML
WorksheetXmlMapperWewnętrzny arkusz XML odczyt/zapis
WorkbookXmlMapperWewnętrzny skoroszyt XML odczyt/zapis

Zobacz także

 Polski