C++ में XML प्रोसेसिंग के साथ कैसे काम करें
Aspose.Cells FOSS for C++ में एक हल्का XML प्रोसेसिंग लेयर शामिल है जिसे आंतरिक रूप से Open XML भागों को पढ़ने और लिखने के लिए उपयोग किया जाता है। XmlDocument, XmlElement, और XmlAttribute क्लासेज XML डेटा तक प्रोग्रामेटिक पहुँच प्रदान करती हैं। यह गाइड XML को लोड करने, तत्वों को पार करने, और दस्तावेज़ों को सीरियलाइज़ करने को कवर करता है।
चरण-दर-चरण मार्गदर्शिका
चरण 1: बिल्ड सेट अप करें
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 दस्तावेज़ लोड करें
इन-मेमोरी दस्तावेज़ ट्री में XML स्ट्रिंग को पार्स करने के लिए XmlDocument::Load का उपयोग करें:
int main() {
XmlDocument doc;
doc.Load("<root><item key=\"a\">Hello</item><item key=\"b\">World</item></root>");
return 0;
}चरण 4: शून्य तत्वों की जाँच करें
XmlElement एक हैंडल-आधारित मॉडल का उपयोग करता है — एक अनुपस्थित पथ से लौटाया गया तत्व शून्य (null) होता है। डेटा तक पहुँचने से पहले हमेशा 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 स्ट्रिंग में क्रमबद्ध करें
क्रमबद्ध XML प्राप्त करने के लिए XmlDocument::SaveToUtf8() का उपयोग करें:
std::string xml = doc.SaveToUtf8();चरण 7: पार्स त्रुटियों को संभालें
अविश्वसनीय XML को प्रोसेस करते समय XmlDocument::Load को एक try/catch ब्लॉक में लपेटें:
try {
doc.Load(xmlContent);
} catch (const XmlParsingException& ex) {
// Handle malformed XML
}सामान्य समस्याएँ और समाधान
IsNull() अप्रत्याशित रूप से true लौटाता है दस्तावेज़ में तत्व पथ मौजूद नहीं है। traversal से पहले सत्यापित करें कि XML संरचना आपके अपेक्षित schema से मेल खाती है।
XmlParsingException लोड होने पर इनपुट विकृत है या इसमें असमर्थित इकाइयाँ हैं। XML को बाहरी टूल के साथ मान्य करें इसे पास करने से पहले Load.
SaveToUtf8() अप्रत्याशित output लौटाता है दस्तावेज़ संरचना after संशोधित की गई Load. सभी मध्यवर्ती को सत्यापित करें Build operations सही ढंग से पूर्ण हुए।
गुण नहीं मिले गुण खोज केस-सेंसिटिव है। सुनिश्चित करें कि गुण का नाम बिल्कुल उसी तरह है जैसा यह XML स्रोत में दिखाई देता है।
से खाली परिणाम GetValue() केवल व्हाइटस्पेस वाले टेक्स्ट नोड्स खाली स्ट्रिंग लौट सकते हैं। तत्व में गैर-व्हाइटस्पेस सामग्री है या नहीं, इसे पुष्टि करने के लिए कच्चे XML की जाँच करें।
अक्सर पूछे जाने वाले प्रश्न
क्या XML लेयर का उपयोग एप्लिकेशन के लिए है या केवल आंतरिक उपयोग के लिए?
XmlDocument, XmlElement, और XmlAttribute क्लासें सार्वजनिक API का हिस्सा हैं और उन्हें सीधे उपयोग किया जा सकता है। मैपर क्लासें (WorkbookXmlMapper, WorksheetXmlMapper, आदि) आंतरिक सहायक हैं जिन्हें XlsxWorkbookSerializer द्वारा बुलाया जाता है और उनका सीधे उपयोग करने का इरादा नहीं है।
क्या मैं शून्य से एक नया XML दस्तावेज़ बना सकता हूँ?
हाँ। एक दस्तावेज़ प्रोग्रामेटिक रूप से बनाने के लिए XmlDocument::Build का उपयोग करें, फिर नोड्स जोड़ने के लिए XmlElement और XmlAttribute::MakeAttribute का उपयोग करें।
क्या XmlDocument XPath क्वेरीज़ को समर्थन देता है?
नहीं। वर्तमान कार्यान्वयन केवल एलिमेंट हैंडल ट्रैवर्सल प्रदान करता है; XPath समर्थित नहीं है।
SaveToUtf8() कौन-सी एन्कोडिंग उत्पन्न करता है?
आउटपुट हमेशा UTF-8 एन्कोडेड XML होता है। XML घोषणा (<?xml version="1.0" encoding="UTF-8"?>) आउटपुट में शामिल होती है।
क्या मैं XmlDocument का उपयोग करके XLSX आर्काइव भागों को पढ़ सकता हूँ?
XLSX आर्काइव भागों का प्रबंधन आंतरिक रूप से XlsxWorkbookSerializer द्वारा किया जाता है। कच्चे आर्काइव भागों को निकालने के लिए कोई सार्वजनिक API नहीं है। सभी XLSX लोड/सेव संचालन के लिए Workbook का उपयोग करें।