সি ++ এ আমার কী এক্সএমএল পার্সার ব্যবহার করা উচিত? [বন্ধ]


344

আমার কাছে এক্সএমএল নথি রয়েছে যা আমার বিশ্লেষণ করতে হবে এবং / অথবা আমার এক্সএমএল নথি তৈরি করতে হবে এবং সেগুলি পাঠ্যে লিখতে হবে (ফাইল বা মেমরি হয়)। যেহেতু এর জন্য সি ++ স্ট্যান্ডার্ড লাইব্রেরির একটি লাইব্রেরি নেই, আমার কী ব্যবহার করা উচিত?

দ্রষ্টব্য: এটি এর জন্য একটি সুনির্দিষ্ট, সি ++ - এফএকিউ-শৈলীর প্রশ্ন হওয়ার উদ্দেশ্য। হ্যাঁ, এটি অন্যের সদৃশ। আমি এই অন্যান্য প্রশ্নগুলিকে কেবল উপযুক্ত করি নি কারণ তারা কিছুটা সুনির্দিষ্ট কিছু জিজ্ঞাসা করার ঝোঁক ছিল। এই প্রশ্নটি আরও জেনেরিক।


আমি tiCpp কোড. google.com/p/ticpp পছন্দ করি , দস্তাবেজগুলি দুর্দান্ত (এখনও?) না, তবে আমি লাইব্রেরিটি, সুন্দর পরিষ্কার কোড পছন্দ করি।

আমি আমার নিজের github.com/igagis/mikroxml লিখেছি
igagis

উত্তর:


679

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

এখানে চিত্র বর্ণনা লিখুন

সুতরাং প্রথম প্রশ্নটি হ'ল: আপনার কী দরকার?

আমার সম্পূর্ণ এক্সএমএল কমপ্লায়েন্স দরকার

ঠিক আছে, সুতরাং আপনার 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 লাইসেন্স ব্যবহার করে, যা কম বেশি আলাদা নামের এমআইটি লাইসেন্স।


6
এটি দেখতে কিছুটা অনুলিপি-পেস্টের মতো। আপনি কি সোর্স ডকুমেন্টটি লিঙ্ক করতে পারবেন?
জোয়েল

28
@ জোয়েল: প্রায়শই যখন কেউ তাদের নিজের প্রশ্নের উত্তম একটি দীর্ঘ পোস্ট দিয়ে উত্তর দেয়, কারণ এটি জেফের পরামর্শ অনুসারে অনুসরণ করে - বিশেষত কারণ একটি উত্তম প্রশ্নের মতো দেখতে দেখতে বেশিরভাগ ক্ষেত্রে বন্ধ করা যেতে পারে good পোস্ট করা উচিত, যদি ব্যক্তি উত্তরটি সঠিকভাবে লিখছেন এবং সেখানে আছেন। তিনি প্রশ্ন জিজ্ঞাসার আগে একটি প্রতিক্রিয়া তৈরি করতে কিছু সময় নিয়ে :) নিকল ভবিষ্যতে ক্লোজ-> নকল প্রশ্নগুলির জন্য আমাদের সকলকে একটি দুর্দান্ত প্রার্থী সরবরাহ করছে।
sarnold

28
@ জোয়েল: আমি ভয় পাচ্ছি যে আমি পারব না। এটি নোটপ্যাড ++ এ আমি অনুলিপি করেছিলাম কেবল একটি অস্থায়ী দলিল। আমি কখনই এটি সংরক্ষণ করি নি, তাই আমি আপনাকে এর সাথে সংযুক্ত করতে পারি না;)
নিকল বোলাস

6
টিনিএক্সএমএল-র
জনবেকার্স

6
আমি এই প্রশ্ন এবং উত্তর পছন্দ, কিন্তু এটি খুব ইউনিক্স-পক্ষপাতযুক্ত। এমএসএক্সএমএল এবং এক্সএমএললাইটের কোনও উল্লেখ নেই? যদি মাল্টি-পল্টফর্ম বহনযোগ্যতাগুলি সেগুলি বাদ দেওয়ার কারণ হয়, তবে এটি প্রশ্নোত্তরে পরিষ্কারভাবে উল্লেখ করা উচিত। (অন্যথায় কিছু লোক সম্ভবত উইন্ডোজ-কেবল প্রকল্পের জন্য যেমন LibxML2 বেছে নিতে পারে, যা সহজেই এড়ানো যেতে পারে এমন মাথাব্যথার জন্য জিজ্ঞাসা করছে))
স্ক্র্যাঞ্চ

17

এক্সএমএল পরিচালনার জন্য আরও একটি পদ্ধতি রয়েছে যা আপনি বিবেচনা করতে চাইতে পারেন, এটি এক্সএমএল ডেটা বাইন্ডিং বলে। বিশেষত আপনার যদি ইতিমধ্যে আপনার এক্সএমএল শব্দভাণ্ডারের একটি আনুষ্ঠানিক স্পেসিফিকেশন থাকে, উদাহরণস্বরূপ, এক্সএমএল স্কিমাতে।

এক্সএমএল ডেটা বাইন্ডিং আপনাকে কোনও এক্সএমএল বিশ্লেষণ বা সিরিয়ালাইজেশন না করেই এক্সএমএল ব্যবহার করতে দেয়। একটি ডেটা বাইন্ডিং সংকলক সমস্ত নিম্ন-স্তরের কোডটি স্বয়ংক্রিয়ভাবে উত্পন্ন করে এবং আপনার অ্যাপ্লিকেশন ডোমেনের সাথে সঙ্গতিপূর্ণ পার্স করা ডেটা সি ++ শ্রেণি হিসাবে উপস্থাপন করে। তারপরে আপনি এই ডেটা দিয়ে ফাংশনগুলিতে কল করে এবং স্ট্রিং এবং পার্সিং পাঠ্যের তুলনায় সি ++ প্রকারের (ইনট, ডাবল ইত্যাদি) সাথে কাজ করে (যা আপনি নিম্ন স্তরের এক্সএমএল অ্যাক্সেস API যেমন যেমন ডিওএম বা SAX এর সাথে করেন))

উদাহরণস্বরূপ, একটি ওপেন-সোর্স এক্সএমএল ডেটা বাইন্ডিং বাস্তবায়ন দেখুন যা আমি লিখেছি, কোডসিন্থিসিস এক্সএসডি এবং হালকা ওজন, নির্ভরতা-মুক্ত সংস্করণ, কোডসিন্থেসিস এক্সএসডি / ই জন্য


13
পোস্টটি আমার আপত্তি নেই, তবে এসও নীতিমালায় বলা হয়েছে যে আপনি যদি কিছু লিখেছিলেন এমন পরামর্শ দিলে আপনার সম্পূর্ণ উল্লেখের স্বার্থে এটি লেখা উচিত ছিল।
নিকল বোলাস

@ নিকল আমি এটিকে উত্তরে সম্পাদনা করেছি।
জেবেন্টলি

সম্ভবত এই তালিকাটি সহায়ক তবে এটির তালিকার লেখক (গুলি) কারা তা আমি খুঁজে বের করতে পারি না (প্রকাশ্য বিবরণী ব্যতীত আমি বর্ণনাগুলি এবং রেটিংগুলি অর্থবহ কিনা তা দেখতে পাচ্ছি না)। সম্ভবত কেউ ডাব্লু 3 সি ডেটা বাঁধাই কার্যকারী গ্রুপের দিকে নজর দিতে পারে যা জনসাধারণের ডোমেইনে থাকা বেশ কয়েকটি ডেটা বাঁধাইয়ের সরঞ্জামগুলি তালিকাভুক্ত করে যা পরীক্ষার জন্য এবং প্রতিবেদনের জন্য ব্যবহৃত হয়েছিল (পুরো প্রকাশ: আমি কোডসিন্থেসিসের সাথে সম্পর্কিত নই, আমি ডাব্লু 3 সি এর সাথে তালিকাভুক্ত জিএসএপকে সাহায্য করেছি) সরঞ্জাম)।
ডাঃ অ্যালেক্স আর ই

1

এক্সপেট সম্পর্কে অন্য একটি নোট: এম্বেড থাকা সিস্টেমের কাজটি দেখার জন্য এটি মূল্যবান। তবে ওয়েবে যে ডকুমেন্টেশনগুলি আপনি খুঁজে পেতে পারেন এটি প্রাচীন এবং ভুল। উত্স কোডটিতে আসলে বেশ কার্যকরী স্তরের মন্তব্য রয়েছে তবে এগুলি বোঝার জন্য এটি কিছুটা অনুভূতি নেবে।


0

আমারও রাখুন।

http://www.codeproject.com/Articles/998388/XMLplusplus-version-The-Cplusplus-update-of-my-XML

কোনও এক্সএমএল বৈধতা বৈশিষ্ট্য নেই, তবে দ্রুত।


2
এটি কি দ্রুত বা আরও ব্যাপকভাবে র‌্যাপিডএক্সএমএল এর চেয়ে বেশি ব্যবহৃত হয়? নাকি পুগিএক্সএমএল? "দ্রুত, সম্পূর্ণ-সম্পূর্ণ নয় XML" সি ++ পার্সারের ডোমেন স্পেসটি বেশ ভালভাবে কভার করা হয়েছে।
নিকল বোলাস

0

ঠিক আছে তাহলে। আমি একটি নতুন তৈরি করেছি, যেহেতু তালিকার কোনওটিই আমার প্রয়োজনগুলি স্থির করে নি।

উপকারিতা:

  1. নিম্ন স্তরে পুল-পার্সার স্ট্রিমিং এপিআই ( জাভা স্ট্যাক্স পছন্দ )
  2. সমর্থিত ব্যতিক্রম এবং আরটিটিআই মোড
  3. মেমরির ব্যবহারের সীমাবদ্ধতা, বড় ফাইলগুলির জন্য সমর্থন (এর থেকে 100 এমবি এক্সমার্ক ফাইল পরীক্ষা করা হয়েছে, গতিটি হার্ডওয়্যারের উপর নির্ভর করে)
  4. ইউনিকোড সমর্থন এবং ইনপুট উত্স এনকোডিংয়ের জন্য স্বতঃ-সনাক্তকরণ
  5. স্ট্রাকচার / পোকোতে পড়ার জন্য উচ্চ স্তরের এপিআই
  6. এক্সএমএল স্ট্রাকচার (বৈশিষ্ট্য এবং নেস্টিং ট্যাগগুলি) সমর্থন করে কাঠামোগুলি / পোকো থেকে এক্সএসডি লেখার এবং উত্পন্ন করার জন্য মেটা-প্রোগ্রামিং এপিআই ( এক্সএসডি প্রজন্মের আরটিটিআই প্রয়োজন, তবে এটি একবারে তৈরি করতে কেবল ডিবাগে ব্যবহার করা যেতে পারে)
  7. সি ++ 11 - জিসিসি এবং ভিসি ++ 15+

অসুবিধা:

  1. ডিটিডি এবং এক্সএসডি বৈধতা এখনও সরবরাহ করা হয়নি
  2. এইচটিটিপি / এইচটিটিপিএস দ্বারা এক্সএমএল / এক্সএসডি প্রাপ্তি চলছে, এখনও হয়নি done
  3. নতুন গ্রন্থাগার

প্রকল্প হোম


1
আপনি বেনমার্ক যোগ করতে পারেন?
ভাদিম পেরেটাকিন

-1

ইন সুরক্ষিত গ্লোব , ইনকর্পোরেটেড আমরা ব্যবহার rapidxml । আমরা অন্য সকলকে চেষ্টা করেছিলাম কিন্তু দ্রুতxML আমাদের পক্ষে সেরা পছন্দ বলে মনে হচ্ছে।

এখানে একটি উদাহরণ:

 rapidxml::xml_document<char> doc;
    doc.parse<0>(xmlData);
    rapidxml::xml_node<char>* root = doc.first_node();

    rapidxml::xml_node<char>* node_account = 0;
    if (GetNodeByElementName(root, "Account", &node_account) == true)
    {
        rapidxml::xml_node<char>* node_default = 0;
        if (GetNodeByElementName(node_account, "default", &node_default) == true)
        {
            swprintf(result, 100, L"%hs", node_default->value());
            free(xmlData);
            return true;
        }
    }
    free(xmlData);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.