কোড সহ এক্সএমএল ফাইলগুলি কীভাবে পড়বেন এবং লিখবেন

কোড সহ এক্সএমএল ফাইলগুলি কীভাবে পড়বেন এবং লিখবেন

আপনি কি জাভা থেকে একটি এক্সএমএল ফাইল পড়তে এবং লিখতে শিখতে চান?





এক্সএমএল ফাইল তথ্য সংরক্ষণসহ বিভিন্ন কাজে ব্যবহৃত হয়। JSON জনপ্রিয় হওয়ার আগে, কাঠামোগত ডেটা উপস্থাপন, সংরক্ষণ এবং পরিবহনের জন্য XML ছিল পছন্দের বিন্যাস। যদিও সাম্প্রতিক বছরগুলিতে এক্সএমএল এর জনপ্রিয়তা হ্রাস পেয়েছে, আপনি মাঝে মাঝে এটির মুখোমুখি হতে পারেন তাই কোড থেকে এটি কীভাবে কাজ করা যায় তা শেখা গুরুত্বপূর্ণ।





জাভা স্ট্যান্ডার্ড সংস্করণ (SE) অন্তর্ভুক্ত XML প্রক্রিয়াকরণের জন্য জাভা API (JAXP) , যা একটি ছাতা শব্দ যা এক্সএমএল প্রক্রিয়াকরণের বেশিরভাগ দিককে আচ্ছাদন করে। এর মধ্যে রয়েছে:





  • বিচার: ডকুমেন্ট অবজেক্ট মডেলে এক্সএমএল আর্টিফ্যাক্ট যেমন এলিমেন্ট, নোড, অ্যাট্রিবিউটস ইত্যাদির সাথে কাজ করার জন্য ক্লাস অন্তর্ভুক্ত রয়েছে।
  • স্যাক্স: XML- এর জন্য সহজ API হল XML পড়ার জন্য একটি ইভেন্ট-চালিত অ্যালগরিদম। এখানে এক্সএমএল পড়ার সময় পাওয়া ইভেন্ট গুলি চালানোর মাধ্যমে প্রক্রিয়া করা হয়। এই পদ্ধতি ব্যবহার করার জন্য মেমরির প্রয়োজনীয়তা কম, কিন্তু API এর সাথে কাজ করা DOM এর সাথে কাজ করার চেয়ে জটিল।
  • স্ট্যাক্স: এক্সএমএল-এর জন্য স্ট্রিমিং এপিআই হল এক্সএমএল এপিআই-তে সাম্প্রতিক সংযোজন এবং এক্সএমএল-এর উচ্চ-পারফরম্যান্স স্ট্রিম ফিল্টারিং, প্রক্রিয়াকরণ এবং পরিবর্তন প্রদান করে। যদিও এটি পুরো এক্সএমএল ডকুমেন্টকে মেমরিতে লোড করা এড়িয়ে যায়, এটি একটি ইভেন্ট-চালিত আর্কিটেকচারের পরিবর্তে একটি পুল-টাইপ আর্কিটেকচার সরবরাহ করে, তাই অ্যাপ্লিকেশনটি স্যাক্স এপিআই ব্যবহারের চেয়ে কোড এবং বোঝা সহজ।

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

একটি নমুনা এক্সএমএল ফাইল

এই নিবন্ধের উদ্দেশ্যে, আমরা নিম্নলিখিত নমুনা XML ব্যবহার করে ধারণাগুলি প্রদর্শন করি, যা পাওয়া যাবে এখানে :






Gambardella, Matthew
XML Developer's Guide
Computer
44.95
2000-10-01
An in-depth look at creating applications
with XML.


Ralls, Kim
...

একটি এক্সএমএল ফাইল পড়া

আসুন DOM API ব্যবহার করে একটি XML ফাইল পড়ার জন্য প্রয়োজনীয় মৌলিক পদক্ষেপগুলি দেখি।

প্রথম ধাপ হল একটি উদাহরণ পাওয়া ডকুমেন্ট বিল্ডার । নির্মাতা এক্সএমএল নথি বিশ্লেষণ করতে ব্যবহৃত হয়। মৌলিক ব্যবহারের জন্য, আমরা এটি এইভাবে করি:





ক্রোমে ডিফল্ট গুগল অ্যাকাউন্ট সেট করুন
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(false);
factory.setValidating(false);
DocumentBuilder builder = factory.newDocumentBuilder();

আমরা এখন XML রুট এলিমেন্ট থেকে শুরু করে পুরো ডকুমেন্ট মেমরিতে লোড করতে পারি। আমাদের উদাহরণে, এটি হল ক্যাটালগ উপাদান

File file = ...; // XML file to read
Document document = builder.parse(file);
Element catalog = document.getDocumentElement();

এবং এটা, লোকেরা! একটি XML পড়ার জন্য DOM API সত্যিই সহজ। আপনার এখন মূল এক্সএমএল ডকুমেন্ট এর মূল উপাদান থেকে শুরু করে অ্যাক্সেস আছে, ক্যাটালগ । আসুন এখন দেখি কিভাবে এটি দিয়ে কাজ করা যায়।





DOM API ব্যবহার করে

এখন আমাদের XML রুট আছে উপাদান , আমরা তথ্যের আকর্ষণীয় নগেট বের করতে DOM API ব্যবহার করতে পারি।

সব পান বই মূল উপাদান এবং তাদের উপর লুপ শিশুদের। মনে রাখবেন যে getChildNodes () ফিরে আসে সব শিশুরা, টেক্সট, মন্তব্য ইত্যাদি সহ, আমাদের উদ্দেশ্যে, আমাদের শুধু শিশু উপাদান প্রয়োজন, তাই আমরা অন্যদের উপর এড়িয়ে যাই।

NodeList books = catalog.getChildNodes();
for (int i = 0, ii = 0, n = books.getLength() ; i Node child = books.item(i);
if ( child.getNodeType() != Node.ELEMENT_NODE )
continue;
Element book = (Element)child;
// work with the book Element here
}

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

static private Node findFirstNamedElement(Node parent,String tagName)
{
NodeList children = parent.getChildNodes();
for (int i = 0, in = children.getLength() ; i Node child = children.item(i);
if ( child.getNodeType() != Node.ELEMENT_NODE )
continue;
if ( child.getNodeName().equals(tagName) )
return child;
}
return null;
}

লক্ষ্য করুন যে DOM API একটি উপাদানের মধ্যে পাঠ্য বিষয়বস্তুকে টাইপের একটি পৃথক নোড হিসাবে বিবেচনা করে TEXT_NODE । উপরন্তু, পাঠ্যের বিষয়বস্তু একাধিক সংলগ্ন পাঠ্য নোডগুলিতে বিভক্ত হতে পারে। সুতরাং একটি উপাদানের মধ্যে পাঠ্য বিষয়বস্তু আনার জন্য নিম্নলিখিত বিশেষ প্রক্রিয়াকরণের প্রয়োজন।

static private String getCharacterData(Node parent)
{
StringBuilder text = new StringBuilder();
if ( parent == null )
return text.toString();
NodeList children = parent.getChildNodes();
for (int k = 0, kn = children.getLength() ; k Node child = children.item(k);
if ( child.getNodeType() != Node.TEXT_NODE )
break;
text.append(child.getNodeValue());
}
return text.toString();
}

এই সুবিধাজনক ফাংশনগুলির সাথে সজ্জিত, আসুন এখন আমাদের নমুনা XML থেকে কিছু তথ্য তালিকাভুক্ত করার জন্য কিছু কোড দেখি। আমরা প্রতিটি বইয়ের জন্য বিস্তারিত তথ্য দেখাতে চাই, যেমন একটি বই ক্যাটালগে পাওয়া যাবে।

NodeList books = catalog.getChildNodes();
for (int i = 0, ii = 0, n = books.getLength() ; i Node child = books.item(i);
if ( child.getNodeType() != Node.ELEMENT_NODE )
continue;
Element book = (Element)child;
ii++;
String id = book.getAttribute('id');
String author = getCharacterData(findFirstNamedElement(child,'author'));
String title = getCharacterData(findFirstNamedElement(child,'title'));
String genre = getCharacterData(findFirstNamedElement(child,'genre'));
String price = getCharacterData(findFirstNamedElement(child,'price'));
String pubdate = getCharacterData(findFirstNamedElement(child,'pubdate'));
String descr = getCharacterData(findFirstNamedElement(child,'description'));
System.out.printf('%3d. book id = %s
' +
' author: %s
' +
' title: %s
' +
' genre: %s
' +
' price: %s
' +
' pubdate: %s
' +
' descr: %s
',
ii, id, author, title, genre, price, pubdate, descr);
}

এক্সএমএল আউটপুট লেখা

জাভা প্রদান করে এক্সএমএল ট্রান্সফর্ম এপিআই এক্সএমএল ডেটা রূপান্তর করতে। আমরা এই API ব্যবহার করি পরিচয় রূপান্তর আউটপুট উৎপন্ন করতে।

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

id=bk113
author=Jane Austen
title=Pride and Prejudice
genre=Romance
price=6.99
publish_date=2010-04-01
description='It is a truth universally acknowledged, that a single man in possession of a good fortune must be in want of a wife.' So begins Pride and Prejudice, Jane Austen's witty comedy of manners-one of the most popular novels of all time-that features splendidly civilized sparring between the proud Mr. Darcy and the prejudiced Elizabeth Bennet as they play out their spirited courtship in a series of eighteenth-century drawing-room intrigues.

উপরের পদক্ষেপটি ব্যবহার করে বিদ্যমান এক্সএমএল ফাইলটি বিশ্লেষণ করা প্রথম পদক্ষেপ। কোডটিও নিচে দেখানো হয়েছে।

File file = ...; // XML file to read
Document document = builder.parse(file);
Element catalog = document.getDocumentElement();

আমরা প্রোপার্টি ফাইল থেকে ডেটা লোড করি বৈশিষ্ট্য জাভা দিয়ে দেওয়া ক্লাস। কোডটি বেশ সহজ এবং নিচে দেখানো হয়েছে।

String propsFile = ...;
Properties props = new Properties();
try (FileReader in = new FileReader(propsFile)) {
props.load(in);
}

একবার প্রোপার্টি লোড হয়ে গেলে, আমরা প্রোপার্টি ফাইল থেকে যে মানগুলি যোগ করতে চাই তা পুনরুদ্ধার করি।

String id = props.getProperty('id');
String author = props.getProperty('author');
String title = props.getProperty('title');
String genre = props.getProperty('genre');
String price = props.getProperty('price');
String publish_date = props.getProperty('publish_date');
String descr = props.getProperty('description');

আসুন এখন একটি খালি তৈরি করি বই উপাদান

আপনি কি ওয়্যারলেস হেডফোনগুলিকে এক্সবক্স ওয়ানে সংযুক্ত করতে পারেন?
Element book = document.createElement('book');
book.setAttribute('id', id);

এ শিশু উপাদান যোগ করা বই তুচ্ছ। সুবিধার জন্য, আমরা প্রয়োজনীয় উপাদানের নাম সংগ্রহ করি a তালিকা এবং একটি লুপে মান যোগ করুন।

List elnames =Arrays.asList('author', 'title', 'genre', 'price',
'publish_date', 'description');
for (String elname : elnames) {
Element el = document.createElement(elname);
Text text = document.createTextNode(props.getProperty(elname));
el.appendChild(text);
book.appendChild(el);
}
catalog.appendChild(book);

এবং এভাবেই এটি করা হয়। দ্য ক্যাটালগ উপাদানটি এখন নতুন বই উপাদান যোগ করা হয়েছে। এখন যা বাকি আছে তা হল আপডেট করা XML লেখা।

এক্সএমএল লেখার জন্য, আমাদের একটি উদাহরণ প্রয়োজন ট্রান্সফরমার যা নিচে দেখানো হিসাবে তৈরি করা হয়েছে। মনে রাখবেন যে আমরা ব্যবহার করে আউটপুট এক্সএমএল এর ইন্ডেন্টেশন অনুরোধ করি setOutputProperty () পদ্ধতি

TransformerFactory tfact = TransformerFactory.newInstance();
Transformer tform = tfact.newTransformer();
tform.setOutputProperty(OutputKeys.INDENT, 'yes');
tform.setOutputProperty('{http://xml.apache.org/xslt}indent-amount', '3');

এক্সএমএল আউটপুট তৈরির চূড়ান্ত ধাপ হল ট্রান্সফর্মেশন প্রয়োগ করা। ফলাফল আউটপুট প্রবাহে প্রদর্শিত হয়, সিস্টেম আউট

tform.transform(new DOMSource(document), new StreamResult(System.out));

একটি ফাইলে সরাসরি আউটপুট লিখতে, নিম্নলিখিতগুলি ব্যবহার করুন।

tform.transform(new DOMSource(document), new StreamResult(new File('output.xml')));

এবং এটি ডোম এপিআই ব্যবহার করে এক্সএমএল ফাইলগুলি পড়া এবং লেখার বিষয়ে এই নিবন্ধটি শেষ করে।

আপনি কি আপনার অ্যাপ্লিকেশনগুলিতে DOM API ব্যবহার করেছেন? এটা কিভাবে পারফর্ম করেছে? দয়া করে নীচের মন্তব্যগুলিতে আমাদের জানান।

শেয়ার করুন শেয়ার করুন টুইট ইমেইল ক্যানন বনাম নিকন: কোন ক্যামেরা ব্র্যান্ড ভাল?

ক্যানন এবং নিকন ক্যামেরা শিল্পের দুটি বড় নাম। কিন্তু কোন ব্র্যান্ড ক্যামেরা এবং লেন্সের উন্নত লাইনআপ অফার করে?

পরবর্তী পড়ুন
সম্পর্কিত বিষয়
  • প্রোগ্রামিং
  • জাভা
লেখক সম্পর্কে জয় শ্রীধর(17 নিবন্ধ প্রকাশিত) জয় শ্রীধর থেকে আরো

আমাদের নিউজলেটার সদস্যতা

প্রযুক্তি টিপস, রিভিউ, ফ্রি ইবুক এবং এক্সক্লুসিভ ডিলের জন্য আমাদের নিউজলেটারে যোগ দিন!

সাবস্ক্রাইব করতে এখানে ক্লিক করুন