5

मुझे लिनक्स सी ++ ऐप लिखने की ज़रूरत है जो इसे XML प्रारूप (आसान हाथ संपादन के लिए) में सेटिंग्स को सहेजता है और सॉकेट और HTTP पर एक्सएमएल संदेशों के माध्यम से मौजूदा ऐप्स के साथ संचार करता है। समस्या यह है कि मैं मेरी मदद करने के लिए कोई बुद्धिमान libs नहीं ढूंढ पा रहा हूं, मैं विशेष रूप से लिखने और कुछ बहुत ही सरल संदेशों को पढ़ने के लिए डीओएम या एसएक्स कोड लिखना पसंद नहीं करता हूं।सी ++ सीरियलाइजेशन क्लीन एक्सएमएल एक्सएसटीआरएएम

बूस्ट सीरियलाइजेशन लगभग एक मैच था, लेकिन यह उत्पन्न होने वाले एक्सएमएल में बहुत सारे बढ़ावा-विशिष्ट डेटा को जोड़ता है। यह स्पष्ट रूप से इंटरचेंज प्रारूपों के लिए अच्छी तरह से काम नहीं करता है। मैं सोच रहा हूं कि बूस्ट सीरियलाइजेशन या कुछ अन्य सी ++ सीरियलाइजेशन लाइब्रेरी को क्लीन एक्सएमएल उत्पन्न करना संभव है या नहीं। मुझे कोई फर्क नहीं पड़ता कि कुछ आवश्यक अतिरिक्त विशेषताएं हैं - जैसे कि संस्करण विशेषता, लेकिन मैं वास्तव में उनके नामकरण को नियंत्रित करने में सक्षम होना चाहूंगा और उन 'फीचर्स' से छुटकारा पाउंगा जिन्हें मैं उपयोग नहीं करता - ट्रैकिंग_लेवल और क्लास_आईडी उदाहरण।

आदर्श रूप से मैं जावा में xstream के समान कुछ करना चाहता हूं। मुझे इस तथ्य से अवगत है कि सी ++ में आत्मनिरीक्षण की कमी है और इसलिए यह कुछ मैन्युअल कोडिंग करने के लिए आवश्यक है - लेकिन यह अच्छा होगा अगर सरल एक्सएमएल को पढ़ने और लिखने के लिए एक साफ समाधान था!

यदि यह नहीं किया जा सकता है तो मुझे उन उपकरणों में भी रूचि है जहां एक्सएमएल स्कीमा कैननिकल संसाधन (अनुबंध पहले) है - सी ++ के लिए एक अच्छा जेएक्सबी विकल्प। अब तक मुझे केवल वाणिज्यिक समाधान जैसे कोडसिंथेसिस एक्सएसडी मिल गया है। मैं ओपन सोर्स समाधान पसंद करूंगा। मैंने gSoap की कोशिश की है - लेकिन यह वास्तव में बदसूरत कोड उत्पन्न करता है और यह भी SOAP- विशिष्ट है।

निराशा में मैंने प्रोटोबफर्स ​​के लिए वैकल्पिक क्रमिकरण प्रारूपों को भी देखना शुरू कर दिया। यह मौजूद है - लेकिन केवल जावा के लिए! यह वास्तव में मुझे आश्चर्यचकित करता है कि प्रोटोकॉल बफर एक्सएमएल की तुलना में एक बेहतर समर्थित डेटा इंटरचेंज प्रारूप प्रतीत होता है।

मैं पागल हो रहा हूं बस इस ऐप के लिए libs ढूंढ रहा हूं और मुझे वास्तव में कुछ नए विचारों की आवश्यकता है। किसी को?

उत्तर

0

मुझे यकीन नहीं है कि यह वास्तव में क्या प्रदान करता है और इसलिए यदि आप यही चाहते हैं लेकिन क्यूटी के पास एक एक्सएमएल मॉड्यूल है। इसमें एक नेटवर्क मॉड्यूल भी है जो ऐसा लगता है जैसे यह आपके लिए कुछ उपयोग हो सकता है।

0

ट्रॉबडॉर के उत्तर पर आगे विस्तार करने के लिए, मैंने Qt's XML libraries का उपयोग किया है, जो कि आप जो कुछ भी कर रहे हैं उसके करीब कुछ कर रहे हैं। अपने स्वयं के मामले में, मैं कॉन्फ़िगरेशन डेटा को स्थानीय फ़ाइल में क्रमबद्ध करता हूं और फिर कभी-कभी इसे अन्य धागे के आसपास स्ट्रीम करता हूं।

QXmlStreamWriter और QXmlStreamReader प्रश्न में दो कक्षाएं हैं। Here उनका उपयोग कर एक उदाहरण है।

अपने स्वयं के एक्सएमएल क्रमिकरण के लिए, मेरे पास उत्पादित वास्तविक प्रारूप पर पूर्ण नियंत्रण है और इसे प्राप्त करने के लिए केवल कुछ सौ पंक्तियां ली गई हैं। क्यूटी के एक्सएमएल का उपयोग करने के बारे में मैं सबसे अच्छी बात यह कह सकता हूं कि मैं सामग्री पर ध्यान केंद्रित कर सकता हूं और पुस्तकालयों को डेटा को चिह्नित करने के दर्दनाक काम को करने देता हूं - जो आदर्श है।

अंत में, here क्यूटी लाइसेंस (वाणिज्यिक, जीपीएल, एलजीपीएल) पर कुछ जानकारी है।

0

सवाल से एक उद्धरण: "अब तक मैं केवल CodeSynthesis XSD की तरह वाणिज्यिक समाधान पाया है मैं खुला स्रोत समाधान पसंद करेंगे।"

CodeSynthesis XSD मुक्त स्रोत प्रोजेक्ट द्वारा इस्तेमाल किया जा सकता।उत्पाद एक वाणिज्यिक मालिकाना लाइसेंस है, लेकिन करने के लिए इसे भी एक ओपन सोर्स लाइसेंस है कि इसके अलावा में (जीपीएल संस्करण 2 लेकिन साथ अतिरिक्त स्वतंत्रता दी)। आप इसे एक साथ उपयोग करने के लिए सभी "जीपीएल-संगत फ्री सॉफ्टवेयर लाइसेंस" और सभी "जीपीएल-असंगत नि: शुल्क सॉफ्टवेयर लाइसेंस" http://www.gnu.org/licenses/license-list.html

में सूचीबद्ध के साथ अनुमति दी जाती है CodeSynthesis XSD के लिए तीसरे लाइसेंस विकल्प एक मुफ्त मालिकाना है छोटे शब्दावली के लिए लाइसेंस। यदि आप एक छोटी एक्सएमएल स्कीमा का उपयोग कर रहे हैं तो आप मुफ्त में के लिए उस लाइसेंस का उपयोग करें। कार्यक्षमता CodeSynthesis XSD के मामले भी और एक उत्पन्न द्विपदीय प्रारूप को पार्स serializing का समर्थन करता है में http://www.codesynthesis.com/products/xsd/license.xhtml

:

अलग CodeSynthesis XSD लाइसेंस के बारे में यहाँ और अधिक पढ़ें। कुशल संचार के लिए आप उस प्रारूप का उपयोग कर सकते हैं।

संबंधित मुद्दे