স্ট্যান্ডার্ড লাইব্রেরি পাত্রে যেমন আপনার কী লাইব্রেরি ব্যবহার করা উচিত তা আপনার প্রয়োজনের উপর নির্ভর করে। এখানে একটি সুবিধাজনক ফ্লোচার্ট রয়েছে:

সুতরাং প্রথম প্রশ্নটি হ'ল: আপনার কী দরকার?
আমার সম্পূর্ণ এক্সএমএল কমপ্লায়েন্স দরকার
ঠিক আছে, সুতরাং আপনার XML প্রক্রিয়া করা প্রয়োজন। খেলনা এক্সএমএল নয়, বাস্তব এক্সএমএল। আপনাকে কেবল নিচু, সহজেই পার্স বিট নয়, সমস্ত এক্সএমএল স্পেসিফিকেশন পড়তে এবং লিখতে সক্ষম হতে হবে । আপনার নেমস্পেস, ডকটাইপস, সত্তা প্রতিস্থাপন, কাজগুলি দরকার। সম্পূর্ণরূপে ডাব্লু 3 সি এক্সএমএল স্পেসিফিকেশন।
পরবর্তী প্রশ্নটি: আপনার এপিআই এর কি ডিওএম বা স্যাক্সের সাথে সামঞ্জস্য হওয়া দরকার?
আমার সঠিক ডম এবং / অথবা স্যাক্স কনফরমেশন দরকার
ঠিক আছে, সুতরাং আপনার DOM এবং / অথবা SAX হওয়ার জন্য সত্যিকারের API এর দরকার। এটি কেবল একটি স্যাক্স-স্টাইলের পুশ পার্সার বা ডিওএম-শৈলীর ধরে রাখা পার্সার হতে পারে না। এটি অবশ্যই আসল ডিওএম বা আসল স্যাক্স হতে হবে, সি ++ যে পরিমাণে অনুমতি দেয়।
তুমি বাছাই করেছ:
Xerces
এটা আপনার পছন্দ। এটি পুরোপুরি একমাত্র সি ++ এক্সএমএল পার্সার / লেখক যা পূর্ণ (বা সি ++ এর কাছাকাছি হিসাবে অনুমতি দেয়) ডোম এবং স্যাক্স কনফরমেশনটি পূর্ণ। এটিতে এক্সআইএনক্লুড সমর্থন, এক্সএমএল স্কিমা সমর্থন এবং অন্যান্য বৈশিষ্ট্যগুলির আধিক্য রয়েছে।
এটির কোন বাস্তব নির্ভরতা নেই। এটি অ্যাপাচি লাইসেন্স ব্যবহার করে।
আমি ডিওএম এবং / অথবা স্যাক্স কনফরমেন্স সম্পর্কে যত্ন নেই
তুমি বাছাই করেছ:
LibXML2
লিবিএক্সএমএল 2 একটি সি-স্টাইল ইন্টারফেস দেয় (যদি এটি আপনাকে সত্যিই বিরক্ত করে, জেরেস ব্যবহার করুন), যদিও ইন্টারফেসটি অন্তত কিছুটা অবজেক্ট ভিত্তিক এবং সহজেই মোড়ানো থাকে। এটি এক্সআইঙ্কলিউড সমর্থন (কলব্যাক সহ যাতে এটি কোথা থেকে ফাইলটি আসে তা বলতে পারে), একটি এক্সপথ ১.০ সনাক্তকারী, রিল্যাক্সএনজি এবং স্কিম্যাট্রোন সমর্থন (ত্রুটি বার্তাগুলি পছন্দসই হওয়ার জন্য অনেকগুলি ছেড়ে যায় ) এবং এর মতো অনেকগুলি বৈশিষ্ট্য সরবরাহ করে and তাই এগিয়ে।
এটির আইকনভের উপর নির্ভরতা রয়েছে তবে এটি নির্ভরতা ছাড়াই কনফিগার করা যায়। যদিও এর অর্থ এই যে আপনার কাছে সম্ভাব্য পাঠ্য এনকোডিংগুলির বিশ্লেষণের একটি আরও সীমিত সেট থাকবে।
এটি এমআইটি লাইসেন্স ব্যবহার করে।
আমার সম্পূর্ণ এক্সএমএল কমপ্লায়েন্সের দরকার নেই
ঠিক আছে, তাই সম্পূর্ণ এক্সএমএল সম্মতি আপনার পক্ষে কিছু যায় আসে না। আপনার এক্সএমএল নথিগুলি হয় পুরোপুরি আপনার নিয়ন্ত্রণে থাকে বা এক্সএমএলের "বেসিক সাবসেট" ব্যবহার করার গ্যারান্টিযুক্ত: কোনও নেমস্পেস, সত্তা, ইত্যাদি use
তাহলে তোমার কি ব্যাপার? পরবর্তী প্রশ্নটি হল: আপনার এক্সএমএল কাজের ক্ষেত্রে আপনার কাছে সবচেয়ে গুরুত্বপূর্ণ জিনিসটি কী?
সর্বাধিক এক্সএমএল পার্সিং পারফরম্যান্স
আপনার অ্যাপ্লিকেশনটির এক্সএমএল নেওয়া উচিত এবং এটিকে রূপান্তর হিসাবে সম্ভবত ঘটানো যেতে পারে তত দ্রুত সি ++ ডেটাস্ট্রাকচারে রূপান্তরিত করা উচিত।
তুমি বাছাই করেছ:
RapidXML
এই এক্সএমএল পার্সারটি টিনের উপরে ঠিক কী বলেছে: দ্রুত এক্সএমএল। এমনকি ফাইলটিকে মেমরির মধ্যে টানতেও এটি মোকাবেলা করে না; কীভাবে তা আপনার উপর নির্ভর করে। এটি যা নিয়ে ডিল করে তা হ'ল পার্স করা যা আপনার অ্যাক্সেস করতে পারে এমন সি ++ ডেটা স্ট্রাকচারের একটি সিরিজের মধ্যে। এবং এটি এটি বাইট বাই ফাইল স্ক্যান করতে যত দ্রুত গ্রহণ করে does
অবশ্যই, নিখরচায় দুপুরের খাবারের মতো জিনিস নেই। এক্সএমএল স্পেসিফিকেশন সম্পর্কে যত্নশীল না এমন বেশিরভাগ এক্সএমএল পার্সারদের মতো, র্যাপিড এক্সএমএল নেমস্পেসগুলি, ডক্টটাইপস, সত্তাগুলি (অক্ষর সত্তা এবং of টি বেসিক এক্সএমএল ব্যতীত) স্পর্শ করে না, এবং আরও অনেক কিছু। সুতরাং মূলত নোড, উপাদান, বৈশিষ্ট্য এবং এই জাতীয়।
এছাড়াও, এটি একটি ডোম-স্টাইলের পার্সার। সুতরাং এটির প্রয়োজন নেই যে আপনি সমস্ত পাঠ্য ভিতরে পড়েছেন However তবে যা যা করে না তা হ'ল কোনও পাঠ্য (সাধারণত) অনুলিপি করা । র্যাপিডএক্সএমএল যেভাবে তার বেশিরভাগ গতি পায় তা হ'ল স্থানে থাকা স্ট্রিংগুলিকে রেফার করে । এটি আপনার পক্ষ থেকে আরও মেমরি পরিচালনা প্রয়োজন (র্যাপিডএক্সএমএল এটি দেখার সময় আপনাকে অবশ্যই সেই স্ট্রিংটি জীবিত রাখতে হবে)।
র্যাপিডএক্সএমএল এর ডিওএম খালি-হাড়। আপনি জিনিসগুলির জন্য স্ট্রিং মান পেতে পারেন। আপনি নাম দ্বারা গুণাবলী অনুসন্ধান করতে পারেন। এটা সম্বন্ধে. বৈশিষ্ট্যগুলিকে অন্যান্য মানগুলিতে (সংখ্যা, তারিখ, ইত্যাদি) রূপান্তর করার জন্য কোনও সুবিধাজনক কার্য নেই। আপনি কেবল স্ট্রিং পেতে।
র্যাপিডএক্সএমএল এর সাথে অন্য একটি খারাপ দিক এটি এক্সএমএল লেখার জন্য বেদনাদায়ক । এটির ডোম তৈরির জন্য আপনার স্ট্রিংয়ের নামগুলি স্পষ্টভাবে মেমরির বরাদ্দ করতে হবে। এটি এক ধরণের স্ট্রিং বাফার সরবরাহ করে তবে এর জন্য আপনার প্রান্তে এখনও প্রচুর স্বচ্ছ কাজ প্রয়োজন। এটি অবশ্যই কার্যকরী, তবে এটি ব্যবহারে ব্যথা।
এটি এমআইটি লাইসেন্স ব্যবহার করে। এটি কোনও শিরোনামহীন গ্রন্থাগার যার কোনও নির্ভরতা নেই।
আই কেয়ার অ্যাপার্টমেন্ট পারফরম্যান্স কিন্তু নট টাইট টু ম্যাট
হ্যাঁ, পারফরম্যান্স আপনার পক্ষে গুরুত্বপূর্ণ। তবে আপনার কিছুটা খালি-হাড়ের দরকার রয়েছে। হতে পারে এমন কিছু যা আরও বেশি ইউনিকোড পরিচালনা করতে পারে বা এর জন্য এত বেশি ব্যবহারকারী-নিয়ন্ত্রিত মেমরি পরিচালনা প্রয়োজন হয় না। পারফরম্যান্সটি এখনও গুরুত্বপূর্ণ, তবে আপনি কিছুটা কম ডাইরেক্ট চাই।
তুমি বাছাই করেছ:
PugiXML
.তিহাসিকভাবে, এটি র্যাপিডএক্সএমএল-এর অনুপ্রেরণা হিসাবে কাজ করেছে। তবে দু'টি প্রকল্পই পাল্টে গেছে, পুগি আরও বৈশিষ্ট্য সরবরাহ করার সাথে সাথে র্যাপিডএক্সএমএল সম্পূর্ণ গতির দিকে মনোনিবেশ করেছে।
পগিএক্সএমএল ইউনিকোড রূপান্তর সহায়তা সরবরাহ করে, সুতরাং আপনার কাছে যদি কিছু ইউটিএফ -16 ডক্স থাকে এবং সেগুলি ইউটিএফ -8 হিসাবে পড়তে চান তবে পুগি সরবরাহ করবে। এমনকি যদি আপনার এই ধরণের জিনিস প্রয়োজন হয় তবে এটির একটি এক্সপথ 1.0 বাস্তবায়নও রয়েছে।
তবে পুগি এখনও বেশ দ্রুত। র্যাপিডএক্সএমএল এর মতো, এর কোনও নির্ভরতা নেই এবং এটি এমআইটি লাইসেন্সের আওতায় বিতরণ করা হয়েছে।
বিশাল ডকুমেন্টগুলি পড়া
আপনার গিগাবাইট আকারে মাপানো নথিগুলি পড়তে হবে । অন্য কোনও প্রক্রিয়া দ্বারা খাওয়ানো হতে পারে আপনি তাদের স্টিডিন থেকে পেয়ে যাচ্ছেন। বা আপনি এগুলি বিশাল ফাইলগুলি থেকে পড়ছেন। বা যাই হোক না কেন. বিন্দু আপনার যা প্রয়োজন হয়, হয় না অর্ডার এটি প্রক্রিয়া সমস্ত একবারে মেমরিতে সমগ্র ফাইলটি পড়ার আছে।
তুমি বাছাই করেছ:
LibXML2
জেরেসের স্যাক্স-স্টাইলের এপিআই এই সক্ষমতা নিয়ে কাজ করবে তবে লিবিএক্সএমএল 2 এখানে কারণ এটি কাজ করা কিছুটা সহজ। একটি স্যাক্স-স্টাইলের এপিআই হ'ল একটি পুশ-এপিআই: এটি একটি স্ট্রিমটিকে বিশ্লেষণ শুরু করে এবং আপনাকে যে ইভেন্টগুলি ধরতে হবে তা কেবল বন্ধ করে দেয়। আপনি প্রসঙ্গ, রাষ্ট্র এবং আরও কিছু পরিচালনা করতে বাধ্য হন। SAX- স্টাইলের এপিআই পড়ার কোডটি প্রত্যাশার চেয়ে অনেক বেশি ছড়িয়ে পড়ে।
LibXML2 এর xmlReaderঅবজেক্টটি একটি পুল-এপিআই। আপনি পরবর্তী এক্সএমএল নোড বা উপাদান যেতে বলছেন ; তোমাকে বলা হয়নি এটি আপনাকে উপযুক্ত হিসাবে দেখতে প্রসঙ্গে সংরক্ষণ করতে, বিভিন্ন সত্ত্বাকে এমনভাবে পরিচালনা করতে দেয় যা কলব্যাকের একগুচ্ছের চেয়ে কোডে অনেক বেশি পাঠযোগ্য।
বিকল্প
প্রবাসী
এক্সপ্যাট একটি সুপরিচিত সি ++ পার্সার যা একটি পুল-পার্সার এপিআই ব্যবহার করে। এটি লিখেছিলেন জেমস ক্লার্ক।
এটি বর্তমান অবস্থা সক্রিয়। সর্বাধিক সাম্প্রতিক সংস্করণটি ২.২.৯, যা প্রকাশিত হয়েছিল (2019-09-25)।
LlamaXML
এটি একটি স্ট্যাক্স-স্টাইল এপিআইয়ের একটি বাস্তবায়ন। এটি একটি টান-পার্সার, যা LibXML2 এর xmlReaderপার্সারের মতো।
তবে এটি 2005 সালের পরে আপডেট করা হয়নি So তাই আবার, ক্যাভেট এমপোটার।
এক্সপথ সমর্থন
এক্সপথ হ'ল একটি এক্সএমএল গাছের মধ্যে উপাদান অনুসন্ধানের ব্যবস্থা। মানকীয় সিনট্যাক্স ব্যবহার করে সাধারণ বৈশিষ্ট্য দ্বারা কার্যকরভাবে কোনও উপাদান বা উপাদান সংগ্রহের নামকরণের সহজ উপায়। অনেক এক্সএমএল লাইব্রেরি এক্সপথ সমর্থন সরবরাহ করে।
কার্যকরভাবে এখানে তিনটি পছন্দ রয়েছে:
- LibXML2 : এটি সম্পূর্ণ এক্সপথ 1.0 সমর্থন সরবরাহ করে। আবার এটি সি সি এপিআই, সুতরাং যদি এটি আপনাকে বিরক্ত করে তবে বিকল্প রয়েছে।
- পুজিএক্সএমএল : এটি এক্সপ্যাথ 1.0 সমর্থন সহ আসে। উপরে হিসাবে, এটি LibXML2 এর চেয়ে বেশি একটি C ++ API, যাতে আপনি এটিতে আরও স্বাচ্ছন্দ্যবোধ করতে পারেন।
- টিনিএক্সএমএল : এটি এক্সপথ সমর্থন সহ আসে না, তবে এটি সরবরাহ করে টিনিএক্সপাথ লাইব্রেরি। টিনিএক্সএমএল 2.0 সংস্করণে রূপান্তর চলছে, যা এপিআইতে উল্লেখযোগ্য পরিবর্তন করে, তাই টিনিএক্সপথ নতুন এপিআইয়ের সাথে কাজ নাও করতে পারে। টিনিএক্সএমএল নিজেই, টিনিএক্সপথ zLib লাইসেন্সের অধীনে বিতরণ করা হয়।
জাস্ট গব দ্য জব ডোন
সুতরাং, আপনি এক্সএমএল নির্ভুলতা সম্পর্কে চিন্তা করবেন না। পারফরম্যান্স আপনার পক্ষে কোনও সমস্যা নয়। স্ট্রিমিং অপ্রাসঙ্গিক। সমস্ত চাই কিছু যে মেমরিতে এক্সএমএল পায় এবং আপনি এটি ফিরে ডিস্কে আবার বিদ্ধ করতে পারবেন। কি আপনি যত্ন সম্পর্কে এপিআই হয়।
আপনি এমন একটি এক্সএমএল পার্সার চান যা আপনার ক্ষুদ্র, ইনস্টল করা সহজ, ব্যবহারে তুচ্ছ এবং আপনার চূড়ান্ত সম্পাদনযোগ্য আকারের সাথে অপ্রাসঙ্গিক হতে পারে এমন যথেষ্ট ছোট।
তুমি বাছাই করেছ:
TinyXML
আমি এই স্লটে টিনিএক্সএমএল রেখেছি কারণ এক্সএমএল পার্সাররা যেমন পান তবে এটি প্রায় ব্র্যান্ডিনড ব্যবহার করা সহজ। হ্যাঁ, এটি ধীর, তবে এটি সহজ এবং স্পষ্ট। এটিতে আরও অনেকগুলি বৈশিষ্ট্য রূপান্তরকরণের জন্য সুবিধামূলক ফাংশন রয়েছে।
টিনএক্সএমএল-তে এক্সএমএল লেখার কোনও সমস্যা নেই। আপনি newকিছু কিছু অবজেক্ট আপ করেছেন, সেগুলি একসাথে সংযুক্ত করুন, ডকুমেন্টটি একটিতে প্রেরণ করুন std::ostreamএবং সকলেই খুশি।
টিনিএক্সএমএল-এর আশেপাশে আরও একটি পুনরুক্তি-বান্ধব এপিআই, এবং এমনকি এটির উপরে স্তরযুক্ত একটি এক্সপথ ১.০ বাস্তবায়ন রয়েছে এমন কিছু বাস্তুসংস্থান রয়েছে।
টিনিএক্সএমএল zLib লাইসেন্স ব্যবহার করে, যা কম বেশি আলাদা নামের এমআইটি লাইসেন্স।