Работа с 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-представления и обратно. Они находятся во внутреннем слое сериализации:
| Класс Mapper | Responsibility |
|---|---|
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 чтение/запись |