C++ में XML के साथ कार्य: pugixml, TinyXML-2 और RapidXML लाइब्रेरीज़

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C++ में XML के साथ कार्य: दस्तावेज़ों को पार्स करने और बनाने के लिए लाइब्रेरी चुनना



XML (eXtensible Markup Language) संरचित डेटा को संग्रहीत और स्थानांतरित करने के लिए प्रमुख प्रारूपों में से एक बना हुआ है। C++ में XML के लिए कोई अंतर्निहित समर्थन नहीं है (पुराने MSXML को छोड़कर), इसलिए डेवलपर्स तृतीय-पक्ष लाइब्रेरीज़ का उपयोग करते हैं। इस लेख में, हम तीन सबसे लोकप्रिय हल्की लाइब्रेरीज़ पर चर्चा करेंगे: pugixml, TinyXML-2 और RapidXML। ये सभी बाहरी निर्भरताओं के बिना काम करती हैं, UTF-8 का समर्थन करती हैं और एम्बेडेड सिस्टम के लिए उपयुक्त हैं।



1. pugixml — बहुमुखी विकल्प



pugixml "हल्के" समाधानों में सबसे तेज़ और सबसे अधिक कार्यात्मक लाइब्रेरी है। यह XPath, स्ट्रीम प्रोसेसिंग और STL-शैली में सुविधाजनक API का समर्थन करती है।



स्थापना: बस pugixml.hpp और pugixml.cpp को प्रोजेक्ट में कॉपी करें।



उदाहरण: XML पार्स करना और पढ़ना

#include "pugixml.hpp"#include <iostream>

int main() { pugi::xml_document doc; pugi::xml_parse_result result = doc.load_file("config.xml");

if (!result) { std::cerr << "त्रुटि: " << result.description() << std::endl; return 1; }

// मूल तत्व प्राप्त करें pugi::xml_node root = doc.child("configuration");

// सभी <parameter> तत्वों को पार करें for (pugi::xml_node param : root.children("parameter")) { std::string name = param.attribute("name").value(); std::string value = param.child_value("value"); std::cout << name << " = " << value << std::endl; }

return 0;}


XML दस्तावेज़ बनाना

pugi::xml_document doc;pugi::xml_node root = doc.append_child("root");root.append_attribute("version") = "1.0";

pugi::xml_node item = root.append_child("item");item.append_attribute("id") = 1;item.append_child("name").text().set("उदाहरण");item.append_child("price").text().set(99.99);

doc.save_file("output.xml");


विशेषताएँ:

  • जटिल क्वेरी के लिए XPath 1.0 का समर्थन।
  • UTF-8/16/32 एन्कोडिंग के साथ कार्य।
  • बड़ी फ़ाइलों के लिए "आलसी" पार्सिंग मोड।


2. TinyXML-2 — सरलता और विश्वसनीयता



TinyXML-2 क्लासिक TinyXML का उत्तराधिकारी है, जो मेमोरी के लिए अनुकूलित है। यह सरल परियोजनाओं के लिए आदर्श है जहाँ XPath की आवश्यकता नहीं है।



स्थापना: दो फ़ाइलें: tinyxml2.h और tinyxml2.cpp।



उदाहरण: विशेषताएँ पढ़ना

#include "tinyxml2.h"#include <iostream>

int main() { tinyxml2::XMLDocument doc; tinyxml2::XMLError err = doc.LoadFile("data.xml");

if (err != tinyxml2::XML_SUCCESS) { std::cerr << "लोड करने में त्रुटि: " << doc.ErrorStr() << std::endl; return 1; }

tinyxml2::XMLElement* element = doc.FirstChildElement("book"); if (element) { const char* title = element->Attribute("title"); int pages = element->IntAttribute("pages"); std::cout << "पुस्तक: " << title << ", पृष्ठ: " << pages << std::endl; }

return 0;}


XML बनाना

tinyxml2::XMLDocument doc;tinyxml2::XMLDeclaration* decl = doc.NewDeclaration();doc.InsertFirstChild(decl);

tinyxml2::XMLElement* root = doc.NewElement("catalog");doc.InsertEndChild(root);

tinyxml2::XMLElement* product = doc.NewElement("product");product->SetAttribute("id", 101);product->SetText("लैपटॉप");root->InsertEndChild(product);

doc.SaveFile("catalog.xml");


लाभ:

  • न्यूनतम मेमोरी खपत (स्ट्रिंग कॉपी किए बिना)।
  • सरल और सहज API।
  • XML टिप्पणियों और CDATA का समर्थन।


3.

अनुशंसाएँ