XML को C++ में कैसे पार्स करें?

How Parse Xml C



इस लेख में, हम चर्चा करने जा रहे हैं कि XML को C++ प्रोग्रामिंग भाषा में कैसे पार्स किया जाए। C++ में XML पार्सिंग मैकेनिज्म को समझने के लिए हम कई कामकाजी उदाहरण देखेंगे।

एक्सएमएल क्या है?

एक्सएमएल एक मार्कअप भाषा है और मुख्य रूप से डेटा को व्यवस्थित तरीके से संग्रहीत और स्थानांतरित करने के लिए उपयोग की जाती है। XML का मतलब एक्सटेंसिबल मार्कअप लैंग्वेज है। यह HTML से काफी मिलता-जुलता है। XML पूरी तरह से डेटा को स्टोर करने और स्थानांतरित करने पर केंद्रित है, जबकि HTML का उपयोग ब्राउज़र पर डेटा प्रदर्शित करने के लिए किया जाता है।







एक नमूना एक्सएमएल फ़ाइल/एक्सएमएल सिंटेक्स

यहाँ एक नमूना एक्सएमएल फ़ाइल है:



संस्करण='1.0' एन्कोडिंग='यूटीएफ़-8'?>

>

छात्र_प्रकार='पार्ट टाईम'>

>टॉम>

>

छात्र_प्रकार='पूरा समय'>

>मक्खी>

>

>

HTML के विपरीत, यह एक टैग-उन्मुख मार्कअप भाषा है, और हम एक XML फ़ाइल में अपने स्वयं के टैग को परिभाषित कर सकते हैं। उपरोक्त उदाहरण में, हमारे पास कई उपयोगकर्ता-परिभाषित टैग हैं जैसे कि . प्रत्येक टैग में संबंधित समाप्ति टैग होगा। के लिए अंतिम टैग है। हम जितने डेटा को व्यवस्थित करना चाहते हैं उतने उपयोगकर्ता-परिभाषित टैग परिभाषित कर सकते हैं।



सी ++ में पार्सिंग पुस्तकालय:

अधिकांश उच्च-स्तरीय प्रोग्रामिंग भाषाओं में XML डेटा को पार्स करने के लिए विभिन्न पुस्तकालय हैं। सी ++ कोई अपवाद नहीं है। यहाँ XML डेटा को पार्स करने के लिए सबसे लोकप्रिय C++ लाइब्रेरी हैं:





  1. रैपिडएक्सएमएल
  2. पुगीएक्सएमएल
  3. टाइनीएक्सएमएल

जैसा कि नाम से पता चलता है, रैपिडएक्सएमएल मुख्य रूप से गति पर केंद्रित है, और यह एक डोम स्टाइल पार्सिंग लाइब्रेरी है। PugiXML यूनिकोड रूपांतरण का समर्थन करता है। यदि आप UTF-16 दस्तावेज़ को UTF-8 में बदलना चाहते हैं, तो आप PugiXML का उपयोग करना चाह सकते हैं। TinyXML XML डेटा को पार्स करने के लिए एक न्यूनतम-न्यूनतम संस्करण है और पिछले दो की तुलना में उतना तेज़ नहीं है। यदि आप केवल काम पूरा करना चाहते हैं और गति की परवाह नहीं करते हैं, तो आप TinyXML चुन सकते हैं।

उदाहरण
अब, हमें सी ++ में एक्सएमएल और एक्सएमएल पार्सिंग लाइब्रेरी की बुनियादी समझ है। आइए अब C++ में xml फ़ाइल को पार्स करने के लिए कुछ उदाहरण देखें:



  • उदाहरण -1: रैपिडएक्सएमएल का उपयोग करके सी ++ में एक्सएमएल पार्स करें
  • उदाहरण -2: PugiXML का उपयोग करके C++ में XML को पार्स करें
  • उदाहरण -3: TinyXML का उपयोग करके C++ में XML को पार्स करें

इनमें से प्रत्येक उदाहरण में, हम एक नमूना XML फ़ाइल को पार्स करने के लिए संबंधित पुस्तकालयों का उपयोग करेंगे।

उदाहरण -1: रैपिडएक्सएमएल का उपयोग करके सी ++ में एक्सएमएल पार्स करें

इस उदाहरण कार्यक्रम में, हम प्रदर्शित करेंगे कि सी ++ में रैपिडएक्सएमएल लाइब्रेरी का उपयोग करके एक्सएमएल को कैसे पार्स किया जाए। यहाँ इनपुट XML फ़ाइल (sample.xml) है:

संस्करण='1.0' एन्कोडिंग='यूटीएफ़-8'?>

>

छात्र_प्रकार='पार्ट टाईम'>

>जॉन>

>

छात्र_प्रकार='पूरा समय'>

>शॉन>

>

छात्र_प्रकार='पार्ट टाईम'>

>सारा>

>

>

यहाँ हमारा लक्ष्य C++ का उपयोग करके उपरोक्त XML फ़ाइल को पार्स करना है। रैपिडएक्सएमएल का उपयोग करके एक्सएमएल डेटा को पार्स करने के लिए सी ++ प्रोग्राम यहां दिया गया है। आप रैपिडएक्सएमएल लाइब्रेरी को यहां से डाउनलोड कर सकते हैं यहां .

#शामिल
#शामिल
#शामिल
#शामिल 'rapidxml.hpp'

का उपयोग करते हुए नाम स्थानघंटे;
का उपयोग करते हुए नाम स्थानरैपिडएक्सएमएल;


xml_दस्तावेज़दस्तावेज़
xml_node *रूट_नोड= शून्य;

NSमुख्य(शून्य)
{
लागत << 'एनमेरे छात्रों के डेटा को पार्स करना (sample.xml).....' <<एंडली;

// नमूना पढ़ें। xml फ़ाइल
ifstream theFile('नमूना.एक्सएमएल');
वेक्टर<char>बफर((istreambuf_iterator<char>(फ़ाइल)), istreambuf_iterator<char>());
बफर।वापस धक्का देना(' 0');

// बफर को पार्स करें
डॉक्टरपार्स<0>(औरबफर[0]);

// रूट नोड का पता लगाएं
रूट_नोड=डॉक्टरपहला_नोड('माईस्टूडेंट्सडाटा');

// छात्र नोड्स पर पुनरावृति
के लिये (xml_node *छात्र_नोड=रूट_नोड->पहला_नोड('विद्यार्थी');छात्र_नोड;छात्र_नोड=छात्र_नोड->अगला_भाई())
{
लागत << 'एनछात्र प्रकार = ' <<छात्र_नोड->प्रथम_विशेषता('student_type')->मूल्य();
लागत <<एंडली;

// छात्र के नाम पर बातचीत
के लिये(xml_node *छात्र_नाम_नोड=छात्र_नोड->पहला_नोड('नाम');छात्र_नाम_नोड;छात्र_नाम_नोड=छात्र_नाम_नोड->अगला_भाई())
{
लागत << 'छात्र का नाम =' <<छात्र_नाम_नोड->मूल्य();
लागत <<एंडली;
}
लागत <<एंडली;
}

वापसी 0;
}

उदाहरण -2: PugiXML का उपयोग करके C++ में XML को पार्स करें

इस उदाहरण कार्यक्रम में, हम प्रदर्शित करेंगे कि C++ में PugiXML लाइब्रेरी का उपयोग करके xml को कैसे पार्स किया जाए। यहाँ इनपुट XML फ़ाइल (sample.xml) है:

संस्करण='1.0' एन्कोडिंग='यूटीएफ-8' स्टैंडअलोन='नहीं' ?>

प्रारूपसंस्करण='1'>

>

नाम='जॉन' प्रकार='पार्ट टाईम'>

>

नाम='सीन' प्रकार='पूरा समय'>

>

नाम='सारा' प्रकार='पार्ट टाईम'>

>

>

>

इस उदाहरण कार्यक्रम में, हम प्रदर्शित करेंगे कि C++ में pugixml लाइब्रेरी का उपयोग करके xml को कैसे पार्स किया जाए। आप PugiXML लाइब्रेरी को यहाँ से डाउनलोड कर सकते हैं यहां .

#शामिल
#शामिल 'pugixml.hpp'

का उपयोग करते हुए नाम स्थानघंटे;
का उपयोग करते हुए नाम स्थानपुगी;

NSमुख्य()
{
लागत << 'एनकर्मचारियों का डेटा पार्स करना (नमूना.एक्सएमएल).....एनएन';


xml_दस्तावेज़ दस्तावेज़;

// एक्सएमएल फाइल लोड करें
अगर (!डॉक्टरफाइल लोड करो('नमूना.एक्सएमएल')) वापसी -1;

xml_node उपकरण=डॉक्टरबच्चा('कर्मचारी डेटा').बच्चा('कर्मचारियों');


के लिये (xml_node_iterator इसे=उपकरण।शुरू();यह!=उपकरण।समाप्त(); ++यह)
{
लागत << 'कर्मचारियों:';

के लिये (xml_attribute_iterator ait=यह->विशेषताएँ_शुरू();संबद्ध!=यह->विशेषताएँ_अंत(); ++संबद्ध)
{
लागत << '' <<संबद्ध->नाम() << '=' <<संबद्ध->मूल्य();
}

लागत <<एंडली;
}

लागत <<एंडली;

वापसी 0;

}

उदाहरण -3: TinyXML का उपयोग करके C++ में XML को पार्स करें

इस उदाहरण कार्यक्रम में, हम प्रदर्शित करेंगे कि C++ में TinyXML लाइब्रेरी का उपयोग करके xml को कैसे पार्स किया जाए। यहाँ इनपुट XML फ़ाइल (sample.xml) है:

संस्करण='1.0' एन्कोडिंग='यूटीएफ़-8'?>

>

>जॉन>

>शॉन>

>सारा>

>

इस उदाहरण कार्यक्रम में, हम प्रदर्शित करेंगे कि C++ में TinyXML लाइब्रेरी का उपयोग करके xml को कैसे पार्स किया जाए। आप TinyXML लाइब्रेरी को यहां से डाउनलोड कर सकते हैं यहां .

#शामिल
#शामिल
#शामिल
#शामिल 'tinyxml2.cpp'

का उपयोग करते हुए नाम स्थानघंटे;
का उपयोग करते हुए नाम स्थानटिनीएक्सएमएल२;


NSमुख्य(शून्य)
{
लागत << 'एनमेरे छात्रों के डेटा को पार्स करना (sample.xml).....' <<एंडली;

// नमूना पढ़ें। xml फ़ाइल
XMLDocument दस्तावेज़;
डॉक्टरफाइल लोड करो( 'नमूना.एक्सएमएल' );

स्थिरांक char*शीर्षक=डॉक्टरFirstChildElement( 'माईस्टूडेंट्सडाटा' )->FirstChildElement( 'विद्यार्थी' )->गेटटेक्स्ट();
printf( 'छात्र का नाम: %sएन', शीर्षक);


एक्सएमएलटेक्स्ट*टेक्स्ट नोड=डॉक्टरLastChildElement( 'माईस्टूडेंट्सडाटा' )->LastChildElement( 'विद्यार्थी' )->पहला बच्चा()->लिखने के लिए();
शीर्षक=टेक्स्ट नोड->मूल्य();
printf( 'छात्र का नाम: %sएन', शीर्षक);


वापसी 0;
}

निष्कर्ष

इस लेख में, हमने संक्षेप में चर्चा की है एक्सएमएल और सी++ में एक्सएमएल को पार्स करने के तीन अलग-अलग उदाहरणों पर गौर किया। TinyXML XML डेटा को पार्स करने के लिए एक न्यूनतम पुस्तकालय है। अधिकांश प्रोग्रामर मुख्य रूप से XML डेटा को पार्स करने के लिए रैपिडएक्सएमएल या पुगीएक्सएमएल का उपयोग करते हैं।