نحوه کار با پردازش XML در C++
Aspose.Cells FOSS برای C++ شامل یک لایه پردازش XML سبک است که بهصورت داخلی برای خواندن و نوشتن بخشهای Open XML استفاده میشود. کلاسهای 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)مرحله ۲: گنجاندن سرآیندها
#include "aspose/cells_foss/XmlDocument.h"
#include "aspose/cells_foss/XmlElement.h"
#include "aspose/cells_foss/XmlAttribute.h"
using namespace Aspose::Cells_FOSS;مرحله ۳: بارگذاری یک سند 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: مدیریت خطاهای تجزیه
در هنگام پردازش XML های غیرقابل اعتماد، XmlDocument::Load را در یک بلوک try/catch بپیچید:
try {
doc.Load(xmlContent);
} catch (const XmlParsingException& ex) {
// Handle malformed XML
}مشکلات رایج و راهحلها
IsNull() بهطور غیرمنتظره true برمیگرداند مسیر عنصر در سند وجود ندارد. قبل از پیمایش، ساختار XML را بررسی کنید تا با طرحواره مورد انتظار شما مطابقت داشته باشد.
XmlParsingException در زمان بارگذاری ورودی بهدرستی قالببندی نشده یا شامل موجودیتهای پشتیبانینشده است. XML را با ابزار خارجی اعتبارسنجی کنید قبل از انتقال آن به Load.
SaveToUtf8() خروجی غیرمنتظرهای برمیگرداند ساختار سند پس از Load. تمام مراحل میانی را بررسی کنید Build عملیات بهدرستی تکمیل شدند.
ویژگیها یافت نشد جستجوی ویژگی به حروف بزرگ و کوچک حساس است. اطمینان حاصل کنید که نام ویژگی دقیقاً همانگونه که در منبع XML ظاهر میشود، مطابقت دارد.
نتیجه خالی از GetValue() گرههای متنی که فقط شامل فضای خالی هستند ممکن است یک رشته خالی برگردانند. XML خام را بررسی کنید تا تأیید کنید که عنصر محتوای غیر فضای خالی دارد.
سوالات متداول
آیا لایه XML برای استفاده برنامه یا فقط برای استفاده داخلی منظور شده است؟
کلاسهای XmlDocument، XmlElement و XmlAttribute بخشی از API عمومی هستند و میتوان بهصورت مستقیم از آنها استفاده کرد. کلاسهای مپر (WorkbookXmlMapper، WorksheetXmlMapper و غیره) کمککنندههای داخلی هستند که توسط XlsxWorkbookSerializer فراخوانی میشوند و برای استفاده مستقیم منظور نشدهاند.
آیا میتوانم یک سند XML جدید را از ابتدا بسازم؟
بله. از XmlDocument::Build برای ساخت یک سند بهصورت برنامهنویسی استفاده کنید، سپس از XmlElement و XmlAttribute::MakeAttribute برای افزودن گرهها استفاده کنید.
آیا XmlDocument از پرسوجوهای XPath پشتیبانی میکند؟
خیر. پیادهسازی فعلی فقط امکان عبور از طریق دستگیرههای عنصر را فراهم میکند؛ XPath پشتیبانی نمیشود.
کدگذاریای که SaveToUtf8() تولید میکند چیست؟
خروجی همواره XML کدگذاری شده به صورت UTF-8 است. اعلان XML (<?xml version="1.0" encoding="UTF-8"?>) در خروجی گنجانده میشود.
آیا میتوانم از XmlDocument برای خواندن بخشهای آرشیو XLSX استفاده کنم؟
بخشهای آرشیو XLSX بهصورت داخلی توسط XlsxWorkbookSerializer مدیریت میشوند. هیچ API عمومی برای استخراج بخشهای خام آرشیو وجود ندارد. برای تمام عملیات بارگذاری/ذخیرهسازی XLSX از Workbook استفاده کنید.