C++ में XML हैंडलिंग: PugiXML और RapidXML लाइब्रेरी

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

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

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

C++ में XML हैंडलिंग: PugiXML और RapidXML लाइब्रेरी

XML (Extensible Markup Language) संरचित डेटा को स्टोर और ट्रांसफर करने के लिए एक महत्वपूर्ण फॉर्मेट बना हुआ है। C++ में XML के साथ काम करने के लिए कई शक्तिशाली लाइब्रेरी मौजूद हैं, जिनमें PugiXML (हल्की, XPath सपोर्ट के साथ) और RapidXML (बेहद तेज़, इन-प्लेस पार्सिंग) प्रमुख हैं। इस लेख में हम दोनों लाइब्रेरी, उनकी विशेषताओं, इंस्टॉलेशन और व्यावहारिक उदाहरणों को समझेंगे।

1. PugiXML — एक सार्वभौमिक टूल

PugiXML एक हल्की, क्रॉस-प्लेटफ़ॉर्म लाइब्रेरी है जो XPath 1.0 और UTF-8/UTF-16 एन्कोडिंग को सपोर्ट करती है। यह कॉन्फ़िगरेशन फ़ाइल पढ़ने से लेकर जटिल XML डॉक्यूमेंट विश्लेषण तक, अधिकांश कार्यों के लिए आदर्श है।

इंस्टॉलेशन

हेडर फ़ाइलें आधिकारिक वेबसाइट से डाउनलोड करें या पैकेज मैनेजर (vcpkg, Conan) का उपयोग करें। प्रोजेक्ट में शामिल करें:

#include "pugixml.hpp"
using namespace pugi;

उदाहरण: XML लोड करना और पढ़ना

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

int main() {
    xml_document doc;
    if (!doc.load_file("config.xml")) {
        std::cerr << "फ़ाइल लोड करने में त्रुटि\n";
        return -1;
    }

    // रूट एलिमेंट प्राप्त करें
    xml_node root = doc.child("settings");
    for (xml_node node = root.child("param"); node; node = node.next_sibling("param")) {
        std::string name = node.attribute("name").as_string();
        int value = node.attribute("value").as_int();
        std::cout << "पैरामीटर: " << name << " = " << value << "\n";
    }
    return 0;
}

उदाहरण: XML डॉक्यूमेंट बनाना

xml_document doc;
xml_node root = doc.append_child("catalog");
for (int i = 1; i <= 3; ++i) {
    xml_node item = root.append_child("item");
    item.append_attribute("id") = i;
    item.append_child("name").text() = ("उत्पाद " + std::to_string(i)).c_str();
    item.append_child("price").text() = 100.0 * i;
}
doc.save_file("catalog.xml");

PugiXML के लाभ:

  • जटिल क्वेरी के लिए XPath सपोर्ट (जैसे, doc.select_nodes("//item[@id>1]"))।
  • एन्कोडिंग और Unicode के साथ काम करना।
  • विस्तृत दस्तावेज़ीकरण और सक्रिय समुदाय।

2. RapidXML — गति और न्यूनतमता

RapidXML एक header-only लाइब्रेरी है जो डेटा कॉपी किए बिना (in-place) XML पार्स करती है। यह PugiXML से काफी तेज़ है, लेकिन XPath सपोर्ट नहीं करती और स्ट्रिंग के जीवनकाल के साथ सावधानी बरतने की आवश्यकता होती है।

इंस्टॉलेशन

rapidxml.hpp और अतिरिक्त फ़ाइलें (rapidxml_utils.hpp, rapidxml_print.hpp) प्रोजेक्ट में कॉपी करें।

उदाहरण: स्ट्रिंग पार्स करना

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

int main() {
    char xml[] = "<root><item id='1'>मान</item></root>";
    rapidxml::xml_document<> doc;
    doc.parse<0>(xml); // 0 — पार्सिंग फ़्लैग

    rapidxml::xml_node<>* root = doc.first_node("root");
    rapidxml::xml_node<>* item = root->first_node("item");
    if (item) {
        std::cout << "ID: " << item->first_attribute("id")->value() << "\n";
        std::cout << "सामग्री: " << item->value() << "\n";
    }
    return 0;
}

उदाहरण: XML बनाना

rapidxml::xml_document<> doc;
rapidxml::xml_node<>* root = doc.allocate_node(rapidxml::node_element, "data");
doc.append_node(root);

rapidxml::xml_node<>* child = doc.allocate_node(rapidxml::node_element, "value", "42");
root->append_node(child);

// स्ट्रिंग में आउटपुट
std::string result;
rapidxml::print(std::back_inserter(result), doc);
std::cout << result;

महत्वपूर्ण: RapidXML स्ट्रिंग कॉपी नहीं करता — सभी नोड मूल बफ़र को संदर्भित करते हैं। सुनिश्चित करें कि बफ़र तब तक मौजूद रहे जब तक आपको डेटा की आवश्यकता है।

अनुशंसाएँ