मैं एक्सएमएल अभिलेखागार पर boost :: serialization का उपयोग शुरू कर रहा हूं। मैं डेटा का उत्पादन और पढ़ सकता हूं, लेकिन जब मैं एक्सएमएल को हाथ-संशोधित करता हूं और दो टैग्स का आदान-प्रदान करता हूं, तो यह "विफल होने में विफल रहता है" (यानी यह खुशी से प्राप्त होता है)।एक्सएमएल अभिलेखागार में टैग नामों के लिए :: क्रमबद्धता जांच को बढ़ावा क्यों नहीं देता है?
यहां एक छोटा, स्वयं पूर्ण उदाहरण दिखा रहा है कि मैं क्या देखें:
#include <iostream>
#include <fstream>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/archive/xml_iarchive.hpp>
#include <boost/serialization/nvp.hpp>
#include <boost/serialization/split_member.hpp>
using namespace std;
int main (void)
{
boost::archive::xml_oarchive oa (cout);
static const string producer = "XXX", version = "0.0.1";
oa << boost::serialization::make_nvp ("producer", producer);
oa << boost::serialization::make_nvp ("producer_version", version);
}
यह मानक उत्पादन, जिसमें करने के लिए XML लिखते हैं:
<producer>XXX</producer>
<producer_version>0.0.1</producer_version>
अब, मैं सभी कोड के स्थान पर एक पाठक के साथ मुख्य समारोह:
boost::archive::xml_iarchive ia (cin);
string producer, version;
ia >> boost::serialization::make_nvp ("producer", producer);
ia >> boost::serialization::make_nvp ("producer_version", version);
cout << producer << " " << version << endl;
जो पिछले आउटपुट को खिलाते समय अपेक्षित काम करता है (आउटपुट "एक्स एक्सएक्स 0.0.1 ")। यदि, हालांकि, मैं इसे एक्सएमएल खिलाता हूं जिसमें मैंने दो लाइनों "निर्माता" और "निर्माता_वर्जन" के क्रम को बदल दिया है, यह अभी भी "0.0.1 XXX" चलाता है और आउटपुट करता है।
इस प्रकार, यह पहचानने में विफल रहता है कि टैग के अपेक्षित नाम नहीं हैं, और बस आगे बढ़ें। the doc में संकेत के अनुसार, मुझे xml_archive_parsing_error
अपवाद फेंकने की उम्मीद होगी।
क्या यहां किसी के पास इसका अनुभव है? क्या मैं गलत हूं?
उदास की तरह, लेकिन अगर ऐसा ही है। जानकारी के लिए धन्यवाद (मुझे इस दस्तावेज़ अनुच्छेद को विशेष रूप से पढ़ने के लिए मुश्किल है, क्योंकि निषेध और सशर्त के अत्यधिक उपयोग के कारण)। –
...प्लस, एक्सएमएल टैग स्थिरता के लिए लाइब्रेरी की जांच की भावना में एक अस्वीकार्य प्रदर्शन जुर्माना माना जाएगा। दूसरे शब्दों में, बूस्ट क्रमबद्धता में एक्सएमएल टैग केवल मनुष्यों के लिए है, सॉफ्टवेयर के लिए नहीं। यह वास्तव में शुरुआत में अंतर्ज्ञानी और उलझन में है, मैं एक्सएमएल जांच की अनुमति देने के लिए एक विकल्प पसंद करता। – alfC