दिलचस्प पोस्ट
क्या पीडीबीबॉक्स में पाठ को सही करना संभव है? PHP में एक भाषा के निर्माण और "अंतर्निर्मित" फ़ंक्शंस में क्या फर्क है? कस्टम सीएसएस के साथ एक वेबविवे में HTML प्रदान करना पायथन डिक्शनरी ऑब्जेक्ट से कुंजी-मान युग्म के सबसेट निकालें? नंबर तरीकों की संख्या में संख्या तक पहुंच क्यों नहीं है? एमएस SQL ​​सर्वर 2008 के लिए पोर्ट कैसे खोजें? AVAudioPlayer को नियंत्रित करने के लिए UISlider एक बैच नौकरी में टाइमस्टैम्प के रूप में एक फ़ाइल नाम बनाना "शीर्ष स्तर JSON arrays" क्या हैं और वे एक सुरक्षा जोखिम क्यों हैं? सभी उपकरणों को फिट करने के लिए एंड्रॉइड स्प्लैश स्क्रीन छवि आकार (फ़ंक्शन () {}) () क्या जावास्क्रिप्ट में बना है? लोड पर css3 संक्रमण एनीमेशन? स्विफ्ट एक्सटेंशन में ओवरराइड करने के तरीकों विजुअल स्टूडियो में एक MySQL डेटा स्रोत से कैसे जुड़ें अवैध ढेर का पता और घातक संकेत 11

आप XML में बाइनरी डेटा कैसे एम्बेड करते हैं?

मेरे जावा में दो अनुप्रयोग लिखे हैं जो नेटवर्क पर एक्सएमएल संदेशों का उपयोग करते हुए एक दूसरे के साथ संवाद करते हैं। संदेश प्राप्त करने के लिए मैं प्राप्त करने के अंत में SAX पार्सर का उपयोग कर रहा हूं। आवश्यकताओं में से एक एक XML संदेश में बाइनरी डेटा को एम्बेड करना है, लेकिन SAX को यह पसंद नहीं है। क्या किसी को भी यह करना आता है?

अद्यतनः मैं एपाचे सीमन्स कोडेक लाइब्रेरी से बेस 64 वर्ग के साथ काम कर रहा हूं, अगर किसी और से कुछ इसी तरह की कोशिश कर रहा है।

Solutions Collecting From Web of "आप XML में बाइनरी डेटा कैसे एम्बेड करते हैं?"

आप बेस 64 का उपयोग करते हुए बाइनरी डेटा को सांकेतिक शब्दों में बदल सकते हैं और उसे बेस 64 तत्व में डाल सकते हैं; नीचे दिए गए लेख इस विषय पर बहुत अच्छा है।

एक्सएमएल दस्तावेजों में बाइनरी डेटा को संभालना

एक्सएमएल इतनी बहुमुखी है …

<DATA> <BINARY> <BIT index="0">0</BIT> <BIT index="1">0</BIT> <BIT index="2">1</BIT> ... <BIT index="n">1</BIT> </BINARY> </DATA> 

एक्सएमएल हिंसा की तरह है – अगर यह आपकी समस्या का समाधान नहीं करता है, तो आप इसका पर्याप्त उपयोग नहीं कर रहे हैं

संपादित करें:

बीटीडब्ल्यू: बेस 64 + सीडीएटीए शायद सबसे अच्छा समाधान है

(EDIT2:
जो भी मुझे ऊपर उठाए, कृपया असली जवाब भी बढ़ाएं। हम नहीं चाहते कि किसी भी गरीब आत्मा को यहां आने दें और वास्तव में मेरी विधि लागू करें क्योंकि यह उच्चतम स्थान पर था, सही है?)

बेस 64 वास्तव में सही जवाब है, लेकिन सीडीएटीए नहीं है, यह मूल रूप से कह रहा है: "यह कुछ भी हो सकता है", हालांकि यह कुछ भी नहीं होना चाहिए, यह बेस 64 एन्कोडेड बाइनरी डेटा होना चाहिए। एक्सएमएल स्किमा बेस 64 बाइनरी को एक आदिम डेटाटाइप के रूप में परिभाषित करता है जिसे आप अपने एक्सएसडी में उपयोग कर सकते हैं।

मुझे सिर्फ पिछले हफ्ते ही समस्या थी मुझे एक पीडीएफ फाइल को सीरियलाइज करना था और उसे एक एक्सएमएल फ़ाइल के अंदर सर्वर पर भेजना था

यदि आप .NET का उपयोग कर रहे हैं, तो आप सीधे एक बेस 64 स्ट्रिंग में एक बाइनरी फ़ाइल को रूपांतरित कर सकते हैं और उसे एक XML तत्व के अंदर चिपका सकते हैं।

 string base64 = Convert.ToBase64String(File.ReadAllBytes(fileName)); 

या, एक विधि XmlWriter ऑब्जेक्ट में सही बनाई गई है मेरे विशेष मामले में, मुझे माइक्रोसॉफ्ट के डेटाटाइप नेमस्पेस शामिल करना पड़ा:

 StringBuilder sb = new StringBuilder(); System.Xml.XmlWriter xw = XmlWriter.Create(sb); xw.WriteStartElement("doc"); xw.WriteStartElement("serialized_binary"); xw.WriteAttributeString("types", "dt", "urn:schemas-microsoft-com:datatypes", "bin.base64"); byte[] b = File.ReadAllBytes(fileName); xw.WriteBase64(b, 0, b.Length); xw.WriteEndElement(); xw.WriteEndElement(); string abc = sb.ToString(); 

स्ट्रिंग एबीसी कुछ ऐसा दिखता है जो इस तरह दिखता है:

 <?xml version="1.0" encoding="utf-16"?> <doc> <serialized_binary types:dt="bin.base64" xmlns:types="urn:schemas-microsoft-com:datatypes"> JVBERi0xLjMKJaqrrK0KNCAwIG9iago8PCAvVHlwZSAvSW5mbw...(plus lots more) </serialized_binary> </doc> 

मैं आमतौर पर एमआईआईईआई बेस 64 या यूआरएल एन्कोडिंग के साथ द्विआधारी डेटा सांकेतिक शब्दों में बदलना।

Base64 एन्कोडिंग / अपने द्विआधारी डेटा को डिकोड करने का प्रयास करें सीडीएटीए अनुभागों में भी देखें

शायद उन्हें एक ज्ञात सेट में सांकेतिक शब्दों में बदलना – आधार 64 जैसा कुछ एक लोकप्रिय विकल्प है

कोई भी बाइनरी-टू-टेक्स्ट एन्कोडिंग चाल करेगी मैं उस तरह से कुछ का उपयोग करता हूँ

 <data encoding="yEnc> <![CDATA[ encoded binary data ]]> </data> 

बेस64 ओवरहेड 33% है

XML1.0 ओवरहेड के लिए बेसएक्सएमएल केवल 20% है लेकिन यह एक मानक नहीं है और केवल एक सी कार्यान्वयन अभी तक नहीं है। इसे बाहर की जाँच करें यदि आप डेटा आकार से चिंतित हैं। ध्यान दें कि हालांकि ब्रांचर्स संपीड़न को कार्यान्वित करने के लिए जाते हैं ताकि यह कम जरूरत हो।

मैंने इस थ्रेड में चर्चा के बाद इसे विकसित किया है: एक्सएमएल में द्विआधारी डेटा एन्कोडिंग: बेस 64 के विकल्प

आप मूल बाइनरी डेटा को यूयूएनकोड भी कर सकते हैं। यह प्रारूप थोड़ी पुरानी है लेकिन यह उसी तरह की है जैसा कि बेस 63 एन्कोडिंग

बेस 64 एन्कोडिंग का उपयोग न करें क्योंकि यह आपके द्वारा कम से कम 40% तक संग्रहण की आवश्यकता होती है। इसके बजाय yEnc जैसे अन्य एन्कोडिंग विधियों का उपयोग करें

यह कैसे XEP-0239 आगे बढ़ने का एक अच्छा उदाहरण है

पुनश्च: मो का जवाब पढ़ने के लिए मत भूलना।

पीएस 2: एक्सईपी पर सूचना अनुभाग पढ़ें।

यदि आपके पास एक्सएमएल प्रारूप पर नियंत्रण है, तो आपको समस्या को अंदर बाहर करना चाहिए। बाइनरी एक्सएमएल को संलग्न करने के बजाय आपको उस दस्तावेज को कैसे खोलना चाहिए, जिसमें कई हिस्से हैं, जिसमें से एक में एक्सएमएल है

इस का पारंपरिक समाधान एक संग्रह है (जैसे टार) लेकिन अगर आप अपने संलग्न दस्तावेज़ को टेक्स्ट-आधारित प्रारूप में रखना चाहते हैं या यदि आपके पास एक फ़ाइल संग्रह लाइब्रेरी तक पहुंच नहीं है, तो एक मानकीकृत योजना भी है, जिसका उपयोग ईमेल और एचटीटीपी में किया जाता है जो मल्टीपार्ट / * एमआईएमई के साथ है सामग्री-स्थानांतरण-एन्कोडिंग: बाइनरी

उदाहरण के लिए यदि आपके सर्वर HTTP के माध्यम से संचार करते हैं और आप एक बहुस्तरीय दस्तावेज़ भेजना चाहते हैं, प्राथमिक एक XML दस्तावेज़ है जो एक बाइनरी डेटा को संदर्भित करता है, HTTP संचार कुछ ऐसा दिखाई दे सकता है:

 POST / HTTP/1.1 Content-Type: multipart/related; boundary="qd43hdi34udh34id344" ... other headers elided ... --qd43hdi34udh34id344 Content-Type: application/xml <myxml> <data href="cid:data.bin"/> </myxml> --qd43hdi34udh34id344 Content-Id: <data.bin> Content-type: application/octet-stream Content-Transfer-Encoding: binary ... binary data ... --qd43hdi34udh34id344-- 

उपर्युक्त उदाहरण के रूप में, XML cid यूआरआई स्कीम का उपयोग करके बाइनरी डेटा को संलग्न मल्टीपार्ट में दर्शाता है जो cid -आईडी हेडर के लिए पहचानकर्ता है। इस योजना का ओवरहेड सिर्फ एमआईएमई हेडर होगा ऐसी ही एक योजना का उपयोग HTTP प्रतिसाद के लिए भी किया जा सकता है। बेशक एचटीटीपी प्रोटोकॉल में, आपके पास एक मल्टीपार्ट दस्तावेज अलग अनुरोध / प्रतिक्रिया में भेजने का विकल्प भी है।

यदि आप अपने डेटा को मल्टीपार्ट में लपेटने से बचना चाहते हैं तो डेटा यूआरआई का उपयोग करना है:

 <myxml> <data href="data:application/something;charset=utf-8;base64,dGVzdGRhdGE="/> </myxml> 

लेकिन इसमें बेस 64 ओवरहेड है।