স্যাক্স পার্সার ব্যবহার করে এক্সএমএল ফাইল পার্স করা হচ্ছে

জাভা একটি এক্সএমএল ফাইলকে পার্স করার মতো বিভিন্ন উপায় সরবরাহ করে যেমন ডওম পার্সার, স্যাক্স পার্সার বা স্টাক্স পার্সার ব্যবহার করে কোনও এক্সএমএল ফাইল পার্স করা।



জাভা একটি এক্সএমএল ফাইল বিশ্লেষণ করার বিভিন্ন উপায় সরবরাহ করে। উদাহরণস্বরূপ, ডোম পার্সার, স্যাক্স পার্সার বা স্টাক্স পার্সার ব্যবহার করে একটি এক্সএমএল ফাইল পার্স করা। এই পোস্টে আমরা স্যাক্স পার্সার ব্যবহার করে কীভাবে কোনও এক্সএমএল ফাইল পার্স করব তা দেখতে পাব



স্যাক্স পার্সার ব্যবহার করে কীভাবে এক্সএমএল ফাইলগুলি বিশ্লেষণ করতে হবে তার বিশদটি নেওয়ার আগে, প্রথমে দেখি বিভিন্ন পার্সারগুলির মাধ্যমে পার্সিংয়ের মধ্যে পার্থক্য কী এবং কখন একটির অপরটিকে বেছে নিতে হয়।

স্যাক্স পার্সার - এসএক্সএল এক্সএমএল এর জন্য সহজ এপিআইয়ের একটি সংক্ষিপ্ত বিবরণ। স্যাক্স পার্সার এক্সএমএল ফাইল লাইনটি লাইন দ্বারা বিশ্লেষণ করে এবং এক্সএমএল ফাইলে খোলার ট্যাগ, ক্লোজিং ট্যাগ বা অক্ষর ডেটার মুখোমুখি হলে ইভেন্টগুলি ট্রিগার করে। এজন্য স্যাক্স পার্সারকে ইভেন্ট-ভিত্তিক পার্সার বলা হয়



ডোম পার্সার - ডম হ'ল ডকুমেন্ট অবজেক্ট মডেলের সংক্ষিপ্ত রূপ। SAX পার্সারের বিপরীতে DOM পার্সার সম্পূর্ণ এক্সএমএল ফাইলকে মেমরিতে লোড করে এবং একটি গাছের কাঠামো তৈরি করে যেখানে গাছের প্রতিটি নোড এক্সএমএল ফাইলের একটি উপাদানকে উপস্থাপন করে। ডোম পার্সারের সাহায্যে আপনি নোড তৈরি করতে পারেন, নোডগুলি সরিয়ে নিতে পারেন, তাদের বিষয়বস্তু পরিবর্তন করতে পারেন এবং নোড স্তরক্রমকে অতিক্রম করতে পারেন। এক্সএমএল ফাইলগুলির সাথে কাজ করার সময় ডিওএম সর্বাধিক নমনীয়তা সরবরাহ করে তবে এটি সম্ভাব্য বৃহত মেমরির পদক্ষেপ এবং বড় এক্সএমএল ফাইলগুলির ক্ষেত্রে উল্লেখযোগ্য প্রসেসরের প্রয়োজনীয়তার জন্য আসে

স্টেক্স পার্সার - স্ট্যাক্স এক্সএমএল এর স্ট্রিমিং এপিআইয়ের একটি সংক্ষিপ্ত রূপ। আপনার অ্যাপ্লিকেশনটির মেমরির সীমাবদ্ধতা থাকলে স্ট্রিম-ভিত্তিক পার্সারগুলি খুব দরকারী are উদাহরণস্বরূপ, জাভা মাইক্রো সংস্করণ চালিত একটি সেলফোন। একইভাবে, যদি আপনার অ্যাপ্লিকেশনটিতে একই সাথে বেশ কয়েকটি অনুরোধগুলি প্রক্রিয়া করা প্রয়োজন, উদাহরণস্বরূপ একটি অ্যাপ্লিকেশন সার্ভার, স্টাক্স পার্সার ব্যবহার করা উচিত।

স্ট্রিম-ভিত্তিক বিশ্লেষণকে আরও শ্রেণিবদ্ধ করা যেতে পারে:

পার্সিং টানুন - টান পার্সিংয়ের সময় ক্লায়েন্ট অ্যাপ্লিকেশন কোনও এক্সএমএল পার্সিং লাইব্রেরিতে পদ্ধতিগুলির জন্য কল করে যখন এটি কোনও এক্সএমএল ইনফোজেটের সাথে ইন্টারেক্ট করার প্রয়োজন হয়। অন্য কথায়, ক্লায়েন্ট কেবল এক্সএমএল ডেটা পায় যখন সে স্পষ্টভাবে এটির জন্য জিজ্ঞাসা করে।



পার্সিং পুশ করুন - পুশ পার্সিংয়ে এটি এক্সএমএল পার্সার যা এক্সএমএল ডেটা ক্লায়েন্টের দিকে ঠেলে দেয়, যখন এটি কোনও এক্সএমএল ইনফোজেটের উপাদানগুলির মুখোমুখি হয়। অন্য কথায়, পার্সার অ্যাপ্লিকেশনটিতে ডেটা প্রেরণ করে অ্যাপ্লিকেশনটি এটি ব্যবহারের জন্য প্রস্তুত থাকুক না কেন।

স্যাক্স, ডিওএম এবং স্টাক্স পার্সারের মধ্যে তুলনা:

নীচের টেবিলটি স্যাক্স, ডম এবং স্টাক্স পার্সারের বৈশিষ্ট্যগুলি সংক্ষিপ্তসার করে

Java_bloge_2

জাভাতে একটি শক্তিতে একটি সংখ্যা বাড়ান

এখন যেহেতু আমরা বিভিন্ন পার্সারগুলি সম্পর্কে জানি, আসুন স্যাক্স পার্সার ব্যবহার করে কীভাবে এক্সএমএল ফাইলটি পার্স করা যায় তা দেখুন

এক্সএমএল ফাইল
নীচে XML ফাইলটি যা আমরা জাভা অবজেক্টগুলি বিশ্লেষণ এবং নির্মাণ করতে যাচ্ছি

জাভাতে স্ট্রিং ডেটকে ডেটে রূপান্তর করতে হয়
বোর্ন আইডেন্টিটি ডগ লিমন 119 ম্যাট ড্যামন, ফ্রাঙ্কা পোটেন্ট 2002 দ্য বর্ন সর্বাধিকতা পল গ্রিনগ্রাস 108 ম্যাট ড্যামন, ফ্রাঙ্কা পন্টে, জোয়ান অ্যালেন 2004 দ্য বর্ন আলটিমেটাম পল গ্রিনগ্রাস 115 ম্যাট ড্যামন, এডগার রামিরেজ, জোয়ান অ্যালেন 2007 দ্য বর্ন লিগ্যাসি টনি গিলরোয় 135 জেরেমি রেনার , রাচেল ওয়েইজ, এডওয়ার্ড নর্টন 2012

প্রকল্পের কাঠামো
এক্সিলিপ আইডিইতে প্রকল্প কাঠামোর স্ক্রিন শটটি এখানে দেওয়া হয়েছে

এখানে ডিভিডি ক্লাস যা মুভি অবজেক্টগুলির একটি তালিকা ধারণ করে

প্যাকেজ co.edureka.parsers.sax আমদানি java.util.List পাবলিক ক্লাস ডিভিডি {ব্যক্তিগত স্ট্রিং নাম ব্যক্তিগত তালিকা সিনেমাগুলি পাবলিক স্ট্রিং getName () {ফেরতের নাম} পাবলিক শূন্য সেটনাম (স্ট্রিং নাম) {this.name = নাম} পাবলিক তালিকা getMovies () {মুভিগুলি ফিরিয়ে দিন} সার্বজনীন শূন্য সেট (চলচিত্রের তালিকা) {this.movies = চলচ্চিত্র}}

মুভি অবজেক্টে মুভিটির নাম, পরিচালক, রানটাইম (সময়কাল), প্রকাশিত বছর এবং সিনেমার কাস্টের মতো বৈশিষ্ট্য রয়েছে

প্যাকেজ co.edureka.parsers.sax পাবলিক ক্লাস মুভি {প্রাইভেট স্ট্রিং নাম প্রাইভেট স্ট্রিং ডিরেক্টরস প্রাইভেট ইন্ট রানটাইম প্রাইভেট ইন্ট প্রকাশিত প্রাইভেট স্ট্রিং কাস্ট পাবলিক স্ট্রিং getName () {রিটার্ন নাম} পাবলিক অকার্যকর সেটনাম (স্ট্রিং নাম) {this.name = নাম} পাবলিক স্ট্রিং getDirectors () {রিটার্ন ডিরেক্টর} পাবলিক অকার্যকর সেটডাইরেক্টর (স্ট্রিং ডিরেক্টর) {this.directors = ডিরেক্টর} পাবলিক ইন getRunটাইম () {রিটার্নটাইম} পাবলিক শূন্যতম সেটআরটাইম (int রানটাইম) {this.runটাইম = রানটাইম} পাবলিক ইন্ট getReleased ( ) {রিটার্ন রিলিজ} পাবলিক অকার্যকর সেট রিলেজড (ইন রিলিজ) {this.released = released} পাবলিক স্ট্রিং গেটকাস্ট () {রিটার্ন কাস্ট} পাবলিক শূন্য সেটকাস্ট (স্ট্রিং কাস্ট) {this.cast = cast @ ওভাররাইড পাবলিক স্ট্রিং টু স্ট্রিং () { 'মুভি [নাম =' + নাম + ', পরিচালক =' + পরিচালক + ', রানটাইম =' + রানটাইম + ', রিলিজ =' + প্রকাশিত + ', নিক্ষিপ্ত =' + castালাই + ']' '} return

স্যাক্স হ্যান্ডলারের বাস্তবায়ন:

আমরা org.xML.sax.helpers প্রসারিত করতে যাচ্ছি। ডিফল্ট হ্যান্ডলার ক্লাস যা অনেকগুলি কলব্যাক পদ্ধতি সরবরাহ করে এবং নিম্নলিখিত পদ্ধতিগুলিকে ওভাররাইড করবে:

স্টার্টমেন্ট () - ট্যাগ শুরু করার সাথে সাথে এই পদ্ধতিটি ডাকা হয়

এন্ড এলিমেন্ট () - কোনও ট্যাগের সমাপ্তির সময় এই পদ্ধতিটি ডাকা হয়

চরিত্র() - কিছু পাঠ্য ডেটার মুখোমুখি হলে এই পদ্ধতিটি ডাকা হয়

দ্রষ্টব্য: স্টার্টডোকামেন্ট (), এন্ড ডকুমেন্ট () ইত্যাদির মতো আরও অনেক কলব্যাক পদ্ধতি রয়েছে যা প্রয়োজনে ওভাররাইড করা যেতে পারে।

প্যাকেজ co.edureka.parsers.sax আমদানি java.util.ArrayList আমদানি java.util.List আমদানি org.xML.sax.Atributes আমদানি org.xML.sax.helpers.DefaultHandler পাবলিক ক্লাস SAXHandler ডিফল্ট হ্যান্ডলার {ডিভিডি ডিভিডি = নতুন ডিভিডি প্রসারিত ) লিস্টমোভিলিস্ট = নতুন অ্যারেলিস্ট () মুভি মুভি = নুল স্ট্রিং কনটেন্ট = নাল পাবলিক অকার্যকর স্টার্টমেন্ট (স্ট্রিং নেমস্পেসিউরি, স্ট্রিং কিউনাম, এট্রিবিউটস অ্যাট্রিবিউটস) {যদি (qname.equals ('ডিভিডি')) ring স্ট্রিং ডিভিডিনেম = বৈশিষ্ট্যগুলি ('নাম') dvd.setName (dvdName)} অন্যথায় যদি (qname.equals ('মুভি')) {মুভি = নতুন মুভি ()}} সার্বজনীন শূন্যতম এন্ডিমেন্ট (স্ট্রিং নেমস্পেসুরি, স্ট্রিং লোকালনেম, স্ট্রিং Qname) {সুইচ (কিউনাম) ) {কেস 'মুভি': মুভিলিস্ট.অ্যাডড (সিনেমা) ব্রেক কেস 'নাম': মুভি.সেটনাম (কন্টেন্ট) ব্রেক কেস 'ডিরেক্টরস': মুভি.সেটডাইরেক্টরস (কন্টেন্ট) ব্রেক কেস 'মুক্তি পেয়েছে': মুভি.সেটরিলেজড (ইন্টিজার.পারস আইন্ট) (বিষয়বস্তু) বিরতি কেস 'রানটাইম': মুভি.সেটআরটাইম (ইন্টিজার.পার্সইন্ট (কনটেন্ট)) ব্রেক কেস 'কাস্ট': মুভি.সেটকাস্ট (কন্টেন্ট) ব্রেক কেস 'ডিভিডি': ডিভিডি.সেটমোভিজ (মুভিলিস্ট) ব্রেক}} পাবলিক অকার্যকর চরা সেন্টার (চর [] সি, ইনট স্টার্ট, ইনট দৈর্ঘ্য) {সামগ্রী = নতুন স্ট্রিং (সিএইচ, শুরু, দৈর্ঘ্য)} পাবলিক ডিভিডি getDVD () {রিটার্ন ডিভিডি}}

স্যাক্স হ্যান্ডলারের পরীক্ষা করা হচ্ছে
এখন আমাদের SAXHandler পরীক্ষা করা যাক। নীচে পরীক্ষার শ্রেণীর SAXTest রয়েছে যেখানে আমরা SAXParserF কারখানার SAXParser এর উদাহরণ পাই এবং পার্স পদ্ধতিটি কল করি যা দুটি আর্গুমেন্ট গ্রহণ করে: একটি ফাইল এবং একটি হ্যান্ডলার উদাহরণ।

প্যাকেজ co.edureka.parsers.sax আমদানি java.io.IOException আমদানি java.nio.file.Path আমদানি java.nio.file.Paths আমদানি java.util.List আমদানি javax.xML.parsers.ParserConfigrationException আমদানি javax.xML.parsers .এক্সএক্সপার্সার আমদানি javax.xML.parsers.SAXParserFactory আমদানি org.xML.sax.SAXException সার্বজনীন স্ট্যাটাস শূন্যতম প্রধান (স্ট্রিং [] আরগস) পার্সার কনফিগারেশনএক্সপশন, স্যাক্সেক্সারসেপশনস্যাক্সার্স্পার্সফার্সটারসেক্সফার্সফ্যাকশন (এক্সপারসেকশন) parserFactor.newSAXParser () SAXHandler Handler = new SAXHandler () পাথ পাথ = Paths.get ('src / উত্স', 'সিনেমা.এক্সএমএল') parser.parse (path.toFile (), হ্যান্ডলার) ডিভিডি = হ্যান্ডলারজিটডিভিডি ( ) মুভিগুলি তালিকাভুক্ত করুন = ডিভিডি.গেটমোভিজ () System.out.println ('ডিভিডি নাম:' + ডিভিডি.সেটনাম ()) এর জন্য (চলচ্চিত্রের চলচ্চিত্র: চলচ্চিত্র)। System.out.println (চলচ্চিত্র)}}}

স্যাকস্টেস্ট শ্রেণি সম্পাদন করার সময় আপনি নীচের আউটপুটটি পাবেন:

বিঃদ্রঃ : আপনি যদি মুভি.এক্সএমএল থেকে আলাদা কাঠামো সহ কোনও এক্সএমএল ফাইলকে বিশ্লেষণ করার চেষ্টা করছেন, তবে পদ্ধতিসমূহের কোডটি এলেমেন্ট () এবং এন্ডিমেন্ট () এ পরিবর্তন করতে হবে to

আপনি যদি কোডটি চেষ্টা করতে আগ্রহী হন তবে কোডটি নিজে ডাউনলোড করুন
[বাটনলিডস ফর্ম_ টাইটেল = 'ডাউনলোড কোড' redirect_url = https: //edureka.wistia.com/medias/st5gg7rp15 কোর্স_আইডি = 44 বাটন_টেক্সট = 'ডাউনলোড কোড']

আমাদের জন্য একটি প্রশ্ন আছে? দয়া করে মন্তব্য বিভাগে এটি উল্লেখ করুন এবং আমরা আপনার কাছে ফিরে আসব।

সম্পর্কিত পোস্ট:

জাভাতে একটি শক্তিতে একটি সংখ্যা বাড়ান