Работа с XML Processing

Работа с XML Processing

Работа с обработкой XML

Aspose.Cells FOSS for C++ использует лёгкий внутренний слой XML для чтения и записи частей Open XML, из которых состоит файл XLSX. Классы XmlDocument, XmlElement и XmlAttribute образуют ядро этого слоя.


Загрузка документа XML

Используйте XmlDocument::Load для разбора строки или файла XML в дерево документа в памяти:

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

Создание и сохранение XML

Используйте XmlDocument::Build для программного построения документа XML, а XmlDocument::SaveToUtf8 — для сериализации его обратно в строку UTF-8:

XmlDocument doc;
// Build the document structure
auto xml = doc.SaveToUtf8();

Обход элементов

XmlElement обеспечивает лёгкий доступ к значениям элементов, их дочерним элементам и атрибутам через дескрипторы. Элементы, созданные конструктором по умолчанию, возвращают IsNull() == true, который можно использовать в качестве безопасной проверки на null:

XmlElement root = doc.GetRootElement();
if (!root.IsNull()) {
    // Traverse children via GetAttributes
    auto attrs = root.GetAttributes();
}

Работа с атрибутами

XmlAttribute предоставляет доступ к парам имени и значения атрибута у элемента. Используйте XmlAttribute::MakeAttribute(name, value) для создания новых атрибутов:

XmlAttribute attr = XmlAttribute::MakeAttribute("key", "value");
bool isNull = attr.IsNull();

Внутренние мапперы XML

Библиотека использует специальные классы мапперов для преобразования объектов модели электронных таблиц в памяти в их XML-представления и обратно. Они находятся во внутреннем слое сериализации:

Класс MapperResponsibility
WorkbookXmlMapperЧитает и записывает часть отношений рабочей книги
WorksheetXmlMapperЧитает и записывает отдельные части рабочего листа XML
StylesheetXmlMapperЧитает и записывает часть стилей
SharedStringTableXmlMapperЧитает и записывает таблицу общих строк

Каждый маппер предоставляет методы Read и Write. Эти методы вызываются внутренне XlsxWorkbookSerializer и не предназначены для прямого использования в коде приложения.


Обработка ошибок

Ошибки парсинга XML бросают XmlParsingException. Перехватывайте это исключение при загрузке недоверенных или некорректных XML:

try {
    doc.Load(xmlContent);
} catch (const XmlParsingException& ex) {
    // Handle parse error
}

Советы и лучшие практики

  • Проверьте XmlElement::IsNull() перед доступом к данным элемента — элементы по отсутствующим путям возвращают нулевой дескриптор.
  • Используйте XmlDocument::SaveToUtf8() для получения сериализованной строки при отладке или журналировании промежуточного состояния XML.
  • Не создавайте экземпляры классов-мэпперов (WorkbookXmlMapper, WorksheetXmlMapper и т.д.) напрямую в коде приложения — вместо этого используйте Workbook::Save и Workbook(filePath).
  • XmlParsingException выбрасывается при некорректном XML; всегда оборачивайте загрузки внешних XML в блок try/catch.

Общие проблемы

ПроблемаПричинаИсправление
IsNull() возвращает trueЭлемент не найден по ожидаемому путиПроверьте структуру XML перед обходом
XmlParsingException при загрузкеНекорректный или не-UTF-8 XMLПроверьте ввод XML перед передачей в Load
Вывод маппера отличается от входных данныхИзменение модели перед сохранениемУбедитесь, что все изменения модели зафиксированы перед вызовом Save

Сводка API Reference

Класс/МетодОписание:
XmlDocument::Load(content)Разобрать строку XML
XmlDocument::Build()Создать документ программно
XmlDocument::SaveToUtf8()Сериализовать документ в строку UTF-8
XmlElement::IsNull()Проверьте, действителен ли дескриптор элемента
XmlElement::GetValue()Получить текстовое содержимое элемента
XmlElement::GetAttributes()Получить коллекцию атрибутов
XmlAttribute::IsNull()Проверьте, действителен ли attribute handle
XmlAttribute::MakeAttribute(name, value)Создайте новый attribute handle
XmlParsingExceptionВыбрасывается при некорректном вводе XML
WorksheetXmlMapperВнутренний worksheet XML чтение/запись
WorkbookXmlMapperВнутренняя рабочая книга XML чтение/запись

См. также:

 Русский