Як працювати з обробкою XML в C++

Як працювати з обробкою XML в C++

Aspose.Cells FOSS for C++ includes a lightweight XML processing layer used internally for reading and writing Open XML parts. The XmlDocument, XmlElement, і XmlAttribute класи забезпечують програмний доступ до даних XML. Це керівництво охоплює завантаження XML, перехід елементів та серіалізацію документів.

Крок за кроком посібник

Перший крок: Створити.

cmake_minimum_required(VERSION 3.15)
project(XmlProcessing CXX)
set(CMAKE_CXX_STANDARD 17)

add_subdirectory(path/to/Aspose.Cells-FOSS-for-Cpp)
add_executable(XmlProcessing main.cpp)
target_link_libraries(XmlProcessing PRIVATE Aspose.Cells.Foss.Cpp)

2 крок: включвати заголовки

#include "aspose/cells_foss/XmlDocument.h"
#include "aspose/cells_foss/XmlElement.h"
#include "aspose/cells_foss/XmlAttribute.h"

using namespace Aspose::Cells_FOSS;

Крок 3: Завантажити XML-документ

Використання XmlDocument::Load для аналізу XML-струнки в дереві документів у пам’яті:

int main() {
    XmlDocument doc;
    doc.Load("<root><item key=\"a\">Hello</item><item key=\"b\">World</item></root>");
    return 0;
}

Крок 4: Перевірка нульових елементів

XmlElement використовує модель на основі ручки елемент, повернений з відсутнього шляху є нульовим. Завжди перевіряйте IsNull() перед доступом до даних:

XmlElement root = doc.GetRootElement();
if (!root.IsNull()) {
    std::string val = root.GetValue();
}

Крок 5: Поперечні атрибути

Використання XmlElement::GetAttributes() Кожна ручка атрибутів показує її назву та значення:

auto attrs = root.GetAttributes();
for (auto& attr : attrs) {
    bool isNull = attr.IsNull();
}

Крок 6: Серіалізація до UTF-8-струнки

Використання XmlDocument::SaveToUtf8() щоб отримати серіалізований XML:

std::string xml = doc.SaveToUtf8();

Швидкий крок 7: Виправляйте помилки аналізу

Wrap XmlDocument::Load у блоці “try/catch” при обробці невірного XML:

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

Загальні проблеми та рішення

IsNull() повертається правдивим несподівано Доведіть, що структура XML відповідає очікуваній схемі перед переходом.

XmlParsingException на завантаженні Вхід є деформатованим або містить непідтримувані суб’єкти. Перевірте XML з зовнішнім інструментом, перш ніж передавати його до Load.

SaveToUtf8() повертає несподіваний результат Структура документу була змінена після того, як Load.Перевірка всіх проміжних Build операції, які завершені правильно.

Атрибути не знайдені Пошук атрибутів має значення великої і великій літера. Перевірте, що ім’я атрібуту відповідає точно тому, як воно з’являється в XML-потоку.

Пусте результат від GetValue() Текстові вузли, які містять лише білий простір можуть повернути порожній струн. Перевірте сировий XML для підтвердження того, що елемент має вміст без білого простору.

Часто задавані запитання

XML-склад призначений для використання в додатках або тільки для внутрішнього користування?

У. XmlDocument, XmlElement, і XmlAttribute класи є частиною публічного API і можуть бути використані безпосередньо.WorkbookXmlMapper, WorksheetXmlMapper, і т.д.) є внутрішніми помічниками, яких називають XlsxWorkbookSerializer і не призначені для прямого використання.

Чи можу я створити новий документ XML з нуля?

Так, використовуйте. XmlDocument::Build щоб побудувати документ програмно, потім використовувати XmlElement і XmlAttribute::MakeAttribute додавати вузли.

Does XmlDocument підтримує запити XPath?

Ні. Актуальна реалізація забезпечує лише перехід елементами; XPath не підтримується.

Що кодування робить? SaveToUtf8() виробляти?

Вихід завжди є кодованим UTF-8 XML. Декларація XML (<?xml version="1.0" encoding="UTF-8"?>) включена в продукцію.

Можна я використаю… XmlDocument Читати частини архіву XLSX?

Архівіальні частини XLSX управляються внутрішнім шляхом: XlsxWorkbookSerializer. Не існує публічного API для вилучення сирої частини архіву. Використовуйте Workbook для всіх операцій завантаження/заховування XLSX.

See Also

 Українська