জাভা জন্য সেরা এক্সএমএল পার্সার [বন্ধ]


387

আমাকে ছোট ছোট পড়তে হবে (সর্বাধিক কয়েকটি এমবি, ইউটিএফ -8 এনকোডেড) এক্সএমএল ফাইলগুলি, বিভিন্ন উপাদান এবং বৈশিষ্ট্যগুলি ঘিরে চারদিকে ছড়িয়ে পড়া, সম্ভবত কিছু সংশোধন করুন এবং এক্সএমএলটি আবার ডিস্কে লিখে লিখুন (পছন্দসই সুন্দর, ইন্ডেন্টেড ফর্ম্যাটিং সহ) ।

আমার প্রয়োজনের জন্য সেরা এক্সএমএল পার্সার কী হবে? থেকে বেছে নেওয়া অনেক আছে। আমি কিছু অবগত যারা হ'ল:

এবং অবশ্যই জেডিকে এক (আমি জাভা 6 ব্যবহার করছি)। আমি জেরেসের সাথে পরিচিত তবে এটি ক্লোনিতে খুঁজে পাই।

প্রস্তাবনা?


6
আমি মনে করি, আপনি এখানে আরও খেলোয়াড় খুঁজে পেতে পারেন: xml.com/lpt/a/1703
dma_k

1
আমি মনে করি এই প্রশ্নে বাস্তব সমস্যা আছে। 1 হ'ল এটি সম্পূর্ণ ভিন্ন বিষয়গুলির সাথে তুলনা করছে, ডোম-ম্যানিপুলেশন লাইব্রেরিগুলির (dom4j, xom, jdom) লম্পিং পার্সারগুলি (জেরেস, ক্রিমসন)। উত্তরগুলিও এডভোকেসির দিকে ঝুঁকছে এবং এটি গঠনমূলক নয়।
নাথান হিউজেস

51
+220 এবং গঠনমূলক নয়। স্পষ্টতই মডারেটর এবং ব্যবহারকারীদের কী গঠনমূলক তা সম্পর্কে বিভিন্ন দৃষ্টিভঙ্গি রয়েছে।
tbroberg

5
হ্যাঁ, মনে হয় এটির মতো প্রশ্ন আসে যখন মোডগুলি সংক্ষিপ্ত হয়। হ্যাঁ উত্তরগুলি মতামতযুক্ত হবে তবে অবশ্যই অভিজ্ঞতার ভিত্তিতে এবং বেশিরভাগ সময় উত্তরগুলি পরিমিত করা হবে। আলোচনার জন্য উন্মুক্ত এই প্রশ্নগুলিকে আলোচনার জন্য মোডগুলিকে সম্ভবত একটি আলাদা ট্যাগ তৈরি করতে হবে যা ফলস্বরূপ গঠনমূলক সমালোচনা এবং ফলাফলের ফলাফল।
আশরাফ আলী ওহাব

@dma_k আপনার লিঙ্কটি কাজ করছে না।
গৌরব

উত্তর:


81

যদি গতি এবং মেমরির কোনও সমস্যা না হয় তবে dom4j একটি সত্যই ভাল বিকল্প। আপনার যদি গতির প্রয়োজন হয় তবে উডস্টক্সের মতো স্ট্যাক্স পার্সার ব্যবহার করা সঠিক উপায় তবে জিনিসগুলি সম্পন্ন করতে আপনাকে আরও কোড লিখতে হবে এবং আপনাকে এক্সএমএল প্রবাহে প্রবাহিত করতে হবে।


6
dom4j বেশ ভাল, তবে অবশ্যই সমস্যা ছাড়াই নয়। ভাল dom4j বিকল্প জন্য, দেখুন stackoverflow.com/questions/831865/...
Jonik

@ জেহেরার তারা থ্রেড-নিরাপদ?
গৌরব

257

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

মূলত স্ট্যান্ডার্ড উপায়ে এক্সএমএল পরিচালনার তিনটি উপায় রয়েছে:

  • SAX এটি সহজতম এপিআই। এক্সএমএল সিরিয়াল উপায়ে প্রসেস করা হয়ে থাকে এমন উপাদান / বৈশিষ্ট্যগুলির অভ্যন্তরের ডেটা প্রাপ্ত হ্যান্ডলারের শ্রেণি নির্ধারণ করে আপনি এক্সএমএলটি পড়েন read এটি কেবলমাত্র কিছু বৈশিষ্ট্য / উপাদানগুলি পড়ার এবং / অথবা কিছু মান ফিরে (আপনার ক্ষেত্রে) লেখার পরিকল্পনা থাকলে এটি দ্রুত এবং সহজ।
  • ডোম এই পদ্ধতিটি একটি অবজেক্ট ট্রি তৈরি করে যা আপনাকে এলোমেলোভাবে এটিকে পরিবর্তন / অ্যাক্সেস করতে দেয় যাতে জটিল এক্সএমএল ম্যানিপুলেশন এবং পরিচালনা করার জন্য এটি আরও ভাল।
  • স্টাক্স এটি SAX এবং DOM এর মধ্যে পথের মাঝখানে। প্রসেস হওয়ার সময় আপনার আগ্রহী পার্সার থেকে ডেটা টানতে আপনি কেবল কোড লিখুন।

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

পার্সারগুলির সমস্ত (আমি সমস্ত পরীক্ষা করে দেখিনি, তবে আমি প্রায় নিশ্চিত) বলার দরকার নেই যে প্রযুক্তিগতভাবে আপনি সমস্ত ব্যবহার করতে পারবেন, যাই হোক না কেন, জ্যাকসপি বাস্তবায়ন মেনে চলার প্রস্তাবিত।


11
প্রকৃতপক্ষে, 3 টি উপায়: স্টাক্স (জাভ্যাক্স.এক্সএমএল.স্ট্রিম) তৃতীয় মানের।
StaxMan

1
java-sample.com/showtutorial.php?tutorialid=152 (ব্যক্তিগতভাবে SAX ভালবাসেন)
কিটোকিড

@ কিটোকিড ক্রোম আমাকে জানিয়েছে যে পৃষ্ঠায় এটিতে বাজে জিনিস রয়েছে। পরিবর্তে আমি এটি ব্যবহার করেছি: sce.uhcl.edu/yue/courses/xML/notes/xmlparser/IntroDOM.asp
রায়ান শিলিংটন

ভাল ওভারভিউ: কেবলমাত্র একটি বিষয় যার সাথে আমি একমত নই - যখন ইনক্রিমেন্টাল / স্ট্রিমিংয়ের জন্য, স্যাক্স এবং স্ট্যাক্স ভাল, স্ট্যান্ডার্ড এপিআই যথেষ্ট, ডোমের ক্ষেত্রে এটি নয় (আইএমও): জাভা-নির্দিষ্ট হওয়ার মতো বৈধ কারণ রয়েছে XOM, JDOM এবং DOM4J: ভাষা-অজানাস্টিক DOM ব্যবহার করা বেশ জটিল।
স্টেক্সম্যান

130

এখানে ডিওএম, স্যাক্স, স্টাক্স এবং ট্র্যাক্সের জন্য একটি দুর্দান্ত তুলনা করা হয়েছে (উত্স: http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP2.html )

বৈশিষ্ট্য স্ট্যাক্স স্যাক্স ডোম ট্র্যাক্স

এপিআই টাইপ                 পুল, স্ট্রিমিং পুশ, স্ট্রিমিং মেমরি ট্রি এক্সএসএলটি বিধি

ব্যবহারের সহজতা           উচ্চ মধ্যম উচ্চ মাধ্যম

এক্সপথ ক্ষমতা    না হ্যাঁ হ্যাঁ

সিপিইউ এবং মেমোরি     ভাল ভাল পরিবর্তিত হয়

কেবলমাত্র        হ্যাঁ হ্যাঁ না নম্বরে ফরোয়ার্ড করুন

এক্সএমএল পড়ুন              হ্যাঁ হ্যাঁ হ্যাঁ

এক্সএমএল লিখুন              হ্যাঁ হ্যাঁ হ্যাঁ না

সিআরইউডি                      না হ্যাঁ না


7
আপনি স্যাক্স সহ এক্সএমএল লিখতে পারেন। সিঙ্কটি একটি হ্যান্ডলার বাস্তবায়ন সরবরাহ করে যা ব্যবহারকারীরা এক্সএক্স আউটপুট উত্পন্ন করতে SAX ইভেন্টগুলিতে কল করতে পারে। (আমি দেখতে পাচ্ছি যে টেবিলটি উত্সাহিত এবং মূল উপাদান নয়, সারণীটি ভুল রয়েছে)
দেব


4

স্যাক্স এবং ডম ছাড়াও এক্সএলএমস্ট্রিমারডিডার ব্যবহার করে স্ট্যাক্স পার্সিং পাওয়া যায় যা একটি এক্সএমএল টান পার্সার।



2

আমি এটি প্রস্তাবিত করবো না যে আপনি আপনার অ্যাপ্লিকেশনটিতে অনেক "চিন্তাভাবনা" পেয়েছেন, তবে এক্সএসএলটি ব্যবহার করা জাভা হেরফেরের চেয়ে এক্সএসএলটি-বাই-বাইডকোড সংকলন সহ আরও ভাল (এবং সম্ভাব্যতর দ্রুত) হতে পারে।


3
আরও ভাল, সম্ভব: দ্রুত, খুব অসম্ভব।
স্টাক্সমান

এক্সএমএলটি পড়া, কারসাজি করা, এবং লেখাই এক্সএসএলটি ঠিক যা করতে ডিজাইন করেছে। এটি বক্সের বাইরে সুন্দর উত্তর।
james.garriss

1

আপনি যদি পারফরম্যান্স সম্পর্কে কম যত্ন নেন তবে আমি আপাচি হজমের একজন বড় অনুরাগী, কারণ এটি আপনাকে XML থেকে জাভা বিনগুলিতে সরাসরি ম্যাপ করতে দেয়।

অন্যথায়, আপনাকে প্রথমে বিশ্লেষণ করতে হবে এবং তারপরে আপনার অবজেক্টগুলি তৈরি করতে হবে।


আমার জাভা বিনগুলি তৈরি করার দরকার নেই, কেবল কাঁচা এক্সএমএল উপাদানগুলি একটু চালিত করুন এবং সেগুলি থেকে ডেটা পেতে নির্দিষ্ট উপাদানগুলির পর্যালোচনা করুন, সুতরাং একটি ডিওএম স্টাইল পার্সার সম্ভবত আমার আদর্শ সমাধান।
ইভান

হ্যাঁ, ডম 4 জে সম্ভবত সেখানে আরও ভাল সমাধান হতে পারে ... আমি এটিকে ভারী ব্যবহার করতাম, যতক্ষণ না আমি পাচাতে এক স্তর পর্যন্ত চলে যাই
উরি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.