2010-02-25 49 views
6

बनाना मुझे पता है कि सैक्स और डोम के बीच का अंतर एक्सएमएल पार्सिंग के बारे में काफी महत्वपूर्ण है, लेकिन लोगों को बनाने के बारे में क्या है? क्या सैक्स का उपयोग करके नया एक्सएमएल बनाने का एक तरीका है या अगर मैं अपने प्रोग्राम में अपने डेटा के आधार पर नई एक्सएमएल फाइल बनाना चाहता हूं, तो मुझे डीओएम का उपयोग करना होगा?डोम बनाम सैक्स - एक्सएमएल

धन्यवाद

उत्तर

7

SAX, है के हवाले से विकिपीडिया:

SAX (एक्सएमएल के लिए सरल एपीआई) एक सीरियल पहुँच पार्सर एक्सएमएल के लिए एपीआई है।
SAX डेटा को XML दस्तावेज़ से पढ़ने के लिए एक तंत्र प्रदान करता है।

यानी एसएक्स एक्सएमएल दस्तावेज़ पढ़ने के लिए बहुत अच्छा हो सकता है, लेकिन यदि आप एक लिखना चाहते हैं, तो आप शायद डीओएम का उपयोग करेंगे।

+1

सरल संभव तरह से एक्सएमएल बनाने के लिए बाइट/स्ट्रिंग स्तर concatnation करना है .. क्यों लोग बनाने के लिए API पार्स करने का उपयोग करना चाहता दस्तावेजों? –

+7

स्ट्रिंग कॉन्सटेनेशन करना, आपको अपने आप से बचने के लिए निपटना होगा (उदाहरण के लिए, सीडीएटीए सहित, कई लोग भूल जाते हैं); एपीआई का उपयोग करने के लिए पहले से ही एक अच्छा कारण है ;; इसके अलावा, डोम (सुंदर) accros भाषाओं को मानकीकृत करता है, जो एक अच्छी बात है, जो आपको कोड को समझने में आसान बनाने में मदद करेगी; और मैंने एक्सएमएल बनाने के लिए इस्तेमाल किए गए बहुत क्रैपी "कॉन्सटेनेशन" टाइप प्रकार को देखा है ... –

1

डीओएम दस्तावेज़ बनाने के लिए प्राकृतिक विकल्प है।

2
  • DOM का उपयोग तब किया जाता है जब आपका डेटा एक विश्वसनीय API के साथ स्मृति में फिट बैठता है।
  • SAX के साथ आप बड़ी मात्रा में डेटा लिखने में सक्षम हैं, SAX भी उच्च प्रदर्शन प्रदान करता है।

तुम भी What are the differences between SAX and DOM parser

और DOM and SAX Put to the Test

+0

इसके अलावा, दो और उल्लेखनीय हैं: * पुल या स्टाक्स * वीटीडी-एक्सएमएल –

+0

आपको साइन इन करने की आवश्यकता है, "डोम और सैक्स टेस्ट टू टेस्ट" लिंक पढ़ने के लिए, यह बेकार है .. – iddober

1

मैं SAX शैली लेखन एपीआई नहीं देखा है में interessted किया जा सकता है, यह केवल पढ़ने के लिए है। अपने विकल्पों को लिखने के लिए डीओएम और विभिन्न गैर-मानकीकृत बिल्डर एपीआई हैं (जो अक्सर डीओएम से उपयोग करने के लिए कहीं अधिक सुविधाजनक होते हैं)। गैर-मानकीकृत एपीआई भाषा/लाइब्रेरी से दूसरे में भिन्न होती हैं, लेकिन उदा। Builder for Ruby। मैं भी ऑपरेटर ओवरलोडिंग के साथ सी के लिए इसी तरह के एपीआई का मसौदा तैयार किया ++: (उदाहरण के सिर्फ एक संभव एपीआई परीक्षण कर रहा है, यह वास्तव में कुछ भी नहीं है)

#include <string> 

struct XMLBuilder { 
    XMLBuilder& operator[](std::string const& elemName) { return *this; } 
    XMLBuilder& operator()(std::string const& attrName, std::string const& attrValue) { return *this; } 
    XMLBuilder& operator()(std::string const& innerText) { return *this; } 
    XMLBuilder& operator()(XMLBuilder const& innerDoc) { return *this; } 
}; 

int main() { 
    XMLBuilder() 
    ["contact"](XMLBuilder() 
     ["name"]("Patrick Hines") 
     ["phone"]("type", "home")("206-555-0144") 
     ["phone"]("type", "work")("425-555-0145") 
     ["address"](XMLBuilder() 
     ["street"]("...") 
     ["zip"]("12345") 
    ) 
    ) 
    ; 
} 
2

SAX एक्सएमएल दस्तावेजों को पढ़ने के लिए, उन्हें नहीं लिख के लिए है।

दूसरी ओर डोम स्मृति और एक XML दस्तावेज़ में संरचना के बीच मैपिंग बनाने के लिए है।

यदि आपके पास स्मृति में आपके डेटा के लिए पहले से ही अपनी डेटा संरचना है (जो आपके प्रसंस्करण के लिए डीओएम संरचना से कहीं अधिक सुविधाजनक है), तो एक डीओएम डेटा संरचना बनाने का मतलब आपके डेटा को डुप्लिकेट करना होगा। हो सकता है कि यदि आपके पास बड़ा डेटा है तो वह नहीं है जो आप चाहते हैं। इसके अतिरिक्त, आपको एक्सएमएल को लिखने से पहले डीओएम संरचना पूरी तरह से बनाना होगा, आपके आवेदन के लिए आवश्यक स्मृति आकार को दोगुना करना होगा। इसके अलावा यह आपके प्रसंस्करण में विलंबता पैदा करेगा।

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

4

आप एक्सएमएल बनाने के लिए SAX का उपयोग कर सकते हैं। निम्नलिखित देखें:

http://code.google.com/p/jlibs/wiki/XMLDocument

यह जावा में है।लेकिन सी ++ के साथ भी हासिल किया जा सकता है;

1

कभी-कभी मैं सरल एक्सएमएल बनाने के लिए प्रिंटफ का उपयोग करूंगा, लेकिन आम तौर पर यह एक्सएमएल-बाइंडिंग टूल का उपयोग करने के लायक है जैसे उदा। Code Synthesis XSD। एक्सएसडी के आधार पर यह आपके लिए एक श्रेणी पदानुक्रम तैयार करेगा। आप बस ऑब्जेक्ट पदानुक्रम को पॉप्युलेट करते हैं, और यह आपके लिए एक्सएमएल बनाएगा।

इस तरह, आपको स्थिर जांच मिलती है कि आपका एक्सएमएल अच्छी तरह से गठित और वैध होगा, जो वास्तव में बग को जल्दी से बाहर लाने में मदद करता है।

यदि आपने कभी जावा के लिए जेएक्सबी या किसी भी समान उपकरण का उपयोग किया है, तो यह वही बात है।

0

आप अपनी भाषा/प्लेटफार्म में .NET के XmlWriter के बराबर खोजने का प्रयास कर सकते हैं।

0

हमेशा नया XML बनाने ... उद्देश्य पढ़ने के लिए के लिए डोम का उपयोग SAX पसंद करते हैं ..

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