ডেলফি পরিবেশে XML ব্যবহার করা। XML ডকুমেন্ট অবজেক্ট মডেল ব্যবহার করে

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

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

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


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


সংযোগ করতে MSXML, আমাদের COM সার্ভার থেকে আমদানি করে সমস্ত ফাংশনের তালিকা সহ একটি ইন্টারফেস ফাইল তৈরি করতে হবে। কিভাবে একটি ইন্টারফেস আমদানি করতে হয় তা নিয়ে বেশ অনেক কিছু লেখা হয়েছে। বিস্তারিত নিবন্ধ, আমি আপনাকে ফাইলটি ডাউনলোড করার পরামর্শ দিচ্ছি MSXML2_TLB.PASইতিমধ্যে ব্যবহারের জন্য প্রস্তুত। ফাইলটি ডাউনলোড হওয়ার পরে, এটিকে আপনার প্রকল্পের পাশে রাখুন বা ডেলফি পরিবেশের lib ফোল্ডারে ফেলে দিন। এইভাবে, সমস্ত তৈরি প্রোগ্রাম মডিউল ব্যবহার করতে সক্ষম হবে MSXML, আপনাকে ব্যবহার করার জন্য MSXML2_TLB লাইন যোগ করতে হবে।

স্পষ্টতার জন্য, এই লাইব্রেরি ব্যবহার করার নিম্নলিখিত উদাহরণ বিবেচনা করুন:

পদ্ধতি লোডডেটা; var XMLDoc: DOMDocument;

রুট: IXMLDomelement; শুরু করুন XMLDoc:= CoDOMDocument.Create; এক্সএমএল XMLDoc.Load("settins.xml"); রুট:= XMLDoc.DocumentElement; ShowMessage(Root.SelectSingleNode("size/width").Text); মূল: = শূন্য; XMLDoc:= শূন্য; শেষ প্রথমে, DOMDocument ক্লাসের একটি উদাহরণ তৈরি করা হয় এবং তারপর settings.xml ফাইলের বিষয়বস্তু মেমরিতে লোড করা হয়। যেহেতু মান অনুযায়ী কোন ফাইলটিতে অবশ্যই একটি রুট ট্যাগ থাকতে হবে (এই ক্ষেত্রে কনফিগারেশন.

), তারপর আমাদের ফাংশন ব্যবহার করে এটি পেতে হবে ডকুমেন্ট এলিমেন্ট

. তারপর ট্যাগ মধ্যে বিষয়বস্তু আউটপুট হয়

, যা ঘুরে ট্যাগগুলির মধ্যে অবস্থিত

. এইভাবে, settings.xml ফাইল থেকে, আমাদের পদ্ধতি মেসেজবক্সে টেক্সট প্রদর্শন করবে "100px" 500px

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

আমি ইতিমধ্যে এই সম্পর্কে লিখেছি, কিন্তু আমি একটি দ্রুত বিশ্লেষণের আসল ক্ষেত্রে ফিরে যেতে চাই

XML ফাইল


এবং ডেটা নিষ্কাশন আমি আজ কর্মস্থলে করেছি। প্রয়োজনীয় ডেটা পেতে আমার 5 মিনিটের বেশি সময় লাগেনি।

পটভূমি। আজ আমরা সম্পর্কে তথ্য প্রক্রিয়া করা প্রয়োজন
ইনস্টল করা প্রোগ্রাম
ব্যবহারকারীদের কম্পিউটারে (হ্যাঁ, হ্যাঁ, আমরা জলদস্যু সনাক্ত করি :))। প্রযুক্তিগত বিভাগ আমাকে এই তথ্য সরবরাহ করেছে, WMI ব্যবহার করে নেটওয়ার্কে সন্দেহাতীত ব্যবহারকারীদের থেকে ছিনিয়ে নেওয়া হয়েছে। তারা যে প্রোগ্রামটি ব্যবহার করে তা XML ফর্ম্যাটে রিপোর্ট তৈরি করে। তদনুসারে, তারা আমাকে একটি বরং জটিল কাঠামো সহ এক্সএমএল ফাইলগুলির একটি পর্বত এনেছিল যেখান থেকে আমাকে কেবল ইনস্টল করা সফ্টওয়্যার পণ্যগুলির নাম বের করতে হবে।
প্রক্রিয়াকরণ। ম্যানুয়ালি কয়েকটি ফাইল দেখার পরে, আমি বুঝতে পেরেছিলাম যে এটি দীর্ঘস্থায়ী হবে না এবং একটি ছোট রূপান্তরকারী লেখার সিদ্ধান্ত নিয়েছি। ডেলফি চালু করার পরে, আমি সংগ্রহস্থলে XML ডেটাবাইন্ডিং অবজেক্টটি নির্বাচন করেছি এবং এটিকে ফাইলগুলির মধ্যে একটি ফিড করেছি। আমি ডিফল্টরূপে সমস্ত সেটিংস এবং পরামিতি ছেড়ে দিয়েছি এবং ফলস্বরূপ আমি এই XML ফাইলের উপাদানগুলি অ্যাক্সেস করার জন্য প্রচুর সংখ্যক ক্লাস এবং ইন্টারফেস সহ একটি মডিউল তৈরি করেছি। আমি ক্লাস স্ট্রাকচার বের করতে খুব বেশি সময় ব্যয় করিনি এবং অবিলম্বে একটি রূপান্তরকারী লেখার দিকে চলে গেলাম।

নতুন কনসোল অ্যাপ্লিকেশনটিতে আমি বেশ সহজ কোড লিখেছি:
প্রোগ্রাম XML2TXT;
ব্যবহার করে
ফর্ম,
ক্লাস, SysUtils,
"SoftwareXML.pas" এ SoftwareXML;
পদ্ধতি CovertXML2Text;
var
CurDir:= IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName));
যদি FindFirst(CurDir+"*.xml", faAnyFile, sr) = 0 তাহলে
পুনরাবৃত্তি
ExportFile:= TStringList.Create;
সফটবেস:= LoadSTDSsoftware(Pchar(CurDir+sr.Name));
i এর জন্য:= 0 থেকে softbase.InstalledSoftware.source.software.Count - 1 করতে
ExportFile.Add(softbase.InstalledSoftware.source.software[i].DisplayName);
ExportFile.Sort;
ExportFile.SaveToFile(CurDir+softbase.InstalledSoftware.Source.servername+."txt");
ExportFile.Free;
FindNext(sr) 0 পর্যন্ত;
শেষ

var
আবেদন। আরম্ভ করা;
CovertXML2 Text;
শেষ

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

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

এটি আসলে সহজ - এটি একটি ছোট হ্যাক যা আপনাকে একটি কনসোল অ্যাপ্লিকেশনে XML ডেটা বাইন্ডিং ব্যবহার করতে দেয়৷ কারণ এটি একগুঁয়েভাবে XML এর সাথে কাজ করার জন্য ক্লাস শুরু করতে অস্বীকার করেছিল। আমি এখনও আসল কারণ খুঁজে পাইনি - সময় আজ গুরুত্বপূর্ণ ছিল, আমি ইতিমধ্যে এই ত্রুটির সাথে লড়াই করার জন্য 5 মিনিটের মধ্যে 4টি ব্যয় করেছি। :) আমি মনে করি আমি পরে এই সমস্যাটি বের করব এবং লিখব আসল কারণ কী।

অদ্ভুত সফটবেস ক্লাস তৈরি করা হয়েছিল XML ভিত্তিকফাইল - এটি ছিল রুট এলিমেন্টের নাম এবং softbase.InstalledSoftware.source.software[i].DisplayName - শুধু নেস্টেড এলিমেন্টের মাধ্যমে কাঙ্খিত একটিতে নেভিগেট করুন এবং এর মান পান।

এই আসলে কি এক সবচেয়ে মত দেখায় দ্রুত উপায়ডেলফিতে XML এর সাথে কাজ করা।

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

এই নিবন্ধে আমরা XML ডকুমেন্ট অবজেক্ট মডেল (DOM) এবং মাইক্রোসফ্ট - Microsoft XML DOM দ্বারা এর বাস্তবায়ন দেখব।

XML DOM হল একটি অবজেক্ট মডেল যা ডেভেলপারকে XML ফাইল লোড এবং প্রসেস করার জন্য অবজেক্ট প্রদান করে। অবজেক্ট মডেলটি নিম্নলিখিত প্রধান বস্তুগুলি নিয়ে গঠিত: XMLDOMDocument, XMLDOMNodeList, XMLDOMNode, XMLDOMNamedNodeMap এবং XMLDOMParseError। এই বস্তুগুলির প্রতিটিতে (XMLDOMParseError ব্যতীত) বৈশিষ্ট্য এবং পদ্ধতি রয়েছে যা আপনাকে অবজেক্ট সম্পর্কে তথ্য পেতে, অবজেক্টের মান এবং কাঠামোকে ম্যানিপুলেট করতে এবং XML নথির কাঠামোর মাধ্যমে নেভিগেট করতে দেয়।

আসুন প্রধান XML DOM অবজেক্টগুলি দেখি এবং বোরল্যান্ড ডেলফিতে তাদের ব্যবহারের কিছু উদাহরণ দিই।

বোরল্যান্ড ডেলফিতে XML DOM ব্যবহার করা

ডেলফি অ্যাপ্লিকেশানগুলিতে Microsoft XML DOM ব্যবহার করার জন্য, আপনাকে প্রকল্পের সাথে উপযুক্ত লাইব্রেরি সংযোগ করতে হবে। এটি করার জন্য, আমরা প্রজেক্ট | কমান্ডটি কার্যকর করি ইমপোর্ট টাইপ লাইব্রেরি এবং ইম্পোর্ট টাইপ লাইব্রেরি ডায়ালগ বক্সে, Microsoft XML সংস্করণ 2.0 লাইব্রেরি (সংস্করণ 2.0) নির্বাচন করুন, যা সাধারণত Windows\System\MSXML.DLL ফাইলে থাকে।

ইউনিট তৈরি করুন বোতামে ক্লিক করার পরে, MSXML_TLB ইন্টারফেস মডিউল তৈরি করা হবে, যা আমাদেরকে XML DOM অবজেক্টগুলি ব্যবহার করার অনুমতি দেবে: DOMDocument, XMLDocument, XMLHTTPRequest এবং MSXML.DLL লাইব্রেরিতে প্রয়োগ করা আরও অনেকগুলি৷ MSXML_TLB মডিউলের একটি রেফারেন্স অবশ্যই ব্যবহার তালিকায় তালিকাভুক্ত করতে হবে।

XML DOM ডিভাইস

ডকুমেন্ট অবজেক্ট মডেল একটি XML ডকুমেন্টকে একটি গাছের কাঠামো হিসাবে উপস্থাপন করে যার মধ্যে শাখা রয়েছে। XML DOM প্রোগ্রামিং ইন্টারফেস অ্যাপ্লিকেশনগুলিকে ডকুমেন্ট ট্রি নেভিগেট করতে এবং এর শাখাগুলিকে ম্যানিপুলেট করার অনুমতি দেয়। প্রতিটি শাখার একটি নির্দিষ্ট ধরন (DOMNodeType) থাকতে পারে, যার ভিত্তিতে পিতামাতা এবং শিশু শাখা নির্ধারণ করা হয়।

বেশিরভাগ XML নথিতে আপনি উপাদান, বৈশিষ্ট্য এবং পাঠ্যের মতো শাখাগুলি পাবেন। গুণাবলী একটি বিশেষ ধরনের শাখা এবং শিশু শাখা নয়। XML DOM অবজেক্ট দ্বারা প্রদত্ত বিশেষ পদ্ধতি ব্যবহার করে বৈশিষ্ট্যগুলিকে ম্যানিপুলেট করা হয়।

ওয়ার্ল্ড ওয়াইড ওয়েব কনসোর্টিয়াম (W3C) প্রস্তাবিত ইন্টারফেসগুলি বাস্তবায়নের পাশাপাশি, Microsoft XML DOM-এ এমন পদ্ধতি রয়েছে যা XSL, XSL প্যাটার্নস, নেমস্পেস এবং ডেটা প্রকারগুলিকে সমর্থন করে। উদাহরণ স্বরূপ, SelectNodes পদ্ধতি আপনাকে XSL প্যাটার্ন সিনট্যাক্স ব্যবহার করে একটি নির্দিষ্ট প্রসঙ্গের মধ্যে শাখা খুঁজে বের করার অনুমতি দেয় এবং TransformNode পদ্ধতি রূপান্তর সম্পাদন করতে XSL-এর ব্যবহার সমর্থন করে।

এক্সএমএল নথি পরীক্ষা করুন

একটি XML নথির উদাহরণ হিসাবে, আসুন মিউজিক সিডি-রমগুলির একটি ডিরেক্টরি নেওয়া যাক, যার নিম্নলিখিত কাঠামো রয়েছে: সাম্রাজ্য বার্লেস্ক বব ডিলান USA 10.90 1985 কলম্বিয়া বনি টাইলর যুক্তরাজ্য সিবিএস রেকর্ডস 9.90 1988 ... আমার হৃদয় খুলুন জো ককার বব ডিলান ইএমআই 8.20 1987

এখন আমরা XML DOM অবজেক্ট মডেলটি দেখতে শুরু করার জন্য প্রস্তুত, যা আমরা XMLDOMDocument অবজেক্ট দিয়ে শুরু করব।

XML নথি - XMLDOMDocument অবজেক্ট

একটি XML নথির সাথে কাজ করা এটি লোড করার সাথে শুরু হয়। এটি করার জন্য, আমরা লোড পদ্ধতি ব্যবহার করি, যার শুধুমাত্র একটি প্যারামিটার রয়েছে যা লোড করা নথির URL নির্দেশ করে৷ একটি স্থানীয় ডিস্ক থেকে ফাইল লোড করার সময়, শুধুমাত্র সম্পূর্ণ ফাইলের নাম নির্দিষ্ট করা হয় (এই ক্ষেত্রে ফাইল:/// প্রোটোকল বাদ দেওয়া যেতে পারে)। যদি XML নথিটি একটি স্ট্রিং হিসাবে সংরক্ষণ করা হয়, তাহলে নথিটি লোড করতে আপনার LoadXML পদ্ধতি ব্যবহার করা উচিত।

নথিটি কীভাবে লোড হয় তা নিয়ন্ত্রণ করতে (সিঙ্ক্রোনাস বা অ্যাসিঙ্ক্রোনাস), Async বৈশিষ্ট্য ব্যবহার করুন। ডিফল্টরূপে, এই বৈশিষ্ট্যটি True-এ সেট করা থাকে, এটি নির্দেশ করে যে দস্তাবেজটি অ্যাসিঙ্ক্রোনাসভাবে লোড করা হয়েছে এবং নথিটি সম্পূর্ণরূপে লোড হওয়ার আগে নিয়ন্ত্রণটি অ্যাপ্লিকেশনে ফিরিয়ে দেওয়া হয়েছে। অন্যথায়, নথিটি সিঙ্ক্রোনাসভাবে লোড করা হয়, এবং তারপর নথিটি লোড হয়েছে কিনা তা খুঁজে বের করতে আপনাকে রেডিস্টেট সম্পত্তির মান পরীক্ষা করতে হবে। আপনি একটি OnReadyStateChange ইভেন্ট হ্যান্ডলারও তৈরি করতে পারেন যা ReadyState সম্পত্তির মান পরিবর্তন হলে নিয়ন্ত্রণ পাবে।

নিম্নলিখিত লোড পদ্ধতি ব্যবহার করে একটি XML নথি লোড কিভাবে দেখায়:

ব্যবহার করে... MSXML_TLB... পদ্ধতি TForm1.Button1Click(প্রেরক: TObject);

var XMLDoc: IXMLDOMDocument;

শুরু করুন XMLDoc:= CoDOMDocument.Create;

XMLDoc.Async:= False;

XMLDoc.Load('C:\DATA\DATA.xml');

// // এখানে কোড যা ম্যানিপুলেট করে // XML নথি এবং এর শাখাগুলি // XMLDoc:= Nil;<>শেষ

একবার নথিটি লোড হয়ে গেলে, আমরা এর বৈশিষ্ট্যগুলি অ্যাক্সেস করতে পারি। এইভাবে, NodeName প্রপার্টিতে মান #document থাকবে, NodeTypeString প্রপার্টিতে মান ডকুমেন্ট থাকবে এবং URL প্রপার্টিতে মান ফাইল থাকবে:///C:/DATA/DATA.xml।

একটি XML নথির উদাহরণ হিসাবে, আসুন মিউজিক সিডি-রমগুলির একটি ডিরেক্টরি নেওয়া যাক, যার নিম্নলিখিত কাঠামো রয়েছে: সাম্রাজ্য বার্লেস্ক বব ডিলান USA 10.90 1985

ত্রুটি হ্যান্ডলিং নথিটি লোড করার সময় প্রক্রিয়াকরণের সাথে সম্পর্কিত বৈশিষ্ট্যগুলি বিশেষ আগ্রহের বিষয়। এইভাবে, ParseError প্রপার্টি একটি XMLDOMParseError অবজেক্ট রিটার্ন করে যাতে ডকুমেন্ট প্রসেসিংয়ের সময় ঘটে যাওয়া একটি ত্রুটি সম্পর্কে তথ্য থাকে।</p><p> <CD> <TITLE>একটি ত্রুটি হ্যান্ডলার লিখতে, আপনি নিম্নলিখিত কোড যোগ করতে পারেন: <ARTIST>Var XMLError: IXMLDOMParseError;</ARTIST> <COUNTRY>বব ডিলান</COUNTRY> <COMPANY>USA</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> </p><p>এখন আসুন কোড লিখি যা XMLDOMParseError অবজেক্টের বৈশিষ্ট্যের মান প্রদান করে:</p><p>XMLError:= XMLDoc.ParseError;<>যদি XMLError.ErrorCode</p><p>0 তারপর XMLError দিয়ে, Memo1. লাইন যোগ করা শুরু করে ('ফাইল: ' + URL);</p> <p>যোগ করুন ('কোড: ' + IntToStr(ErrorCode));</p> <p>যোগ করুন ('ত্রুটি: ' + কারণ); <TITLE>যোগ করুন ('পাঠ্য: ' + SrcText);</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>যোগ করুন ('লাইন: ' + IntToStr(লাইন));</h2> <p>যোগ করুন ('অবস্থান: ' + IntToStr(LinePos));</p><p>end Else Memo1.Lines.Add(XMLDoc.XML);</p><p>শেষ;</p> <p>এবং আমাদের অ্যাপ্লিকেশন রান করা যাক. ফলস্বরূপ, আমরা নিম্নলিখিত ত্রুটির তথ্য পাই।</p> <p>আপনি উপরের উদাহরণ থেকে দেখতে পাচ্ছেন, XMLDOMParseError অবজেক্ট দ্বারা প্রত্যাবর্তিত তথ্য ত্রুটিটিকে স্থানীয়করণ করতে এবং এর ঘটনার কারণ বোঝার জন্য যথেষ্ট।</p> <p>এখন বন্ধ উপাদান পুনরুদ্ধার করা যাক</p><p>আমাদের নথিতে এবং XML DOM নিয়ে আমাদের আলোচনা চালিয়ে যান।</p><p>ডকুমেন্ট ট্রি অ্যাক্সেস করা</p> <p>একটি ডকুমেন্ট ট্রি অ্যাক্সেস করতে, আপনি হয় রুট উপাদানটি পেতে পারেন এবং তারপরে এর চাইল্ড শাখার মাধ্যমে পুনরাবৃত্তি করতে পারেন বা একটি নির্দিষ্ট শাখা খুঁজে পেতে পারেন। প্রথম ক্ষেত্রে, আমরা DocumentElement প্রপার্টির মাধ্যমে রুট এলিমেন্ট পাই, যা XMLDOMNode টাইপের একটি অবজেক্ট রিটার্ন করে। প্রতিটি চাইল্ড এলিমেন্টের বিষয়বস্তু পেতে কিভাবে DocumentElement প্রপার্টি ব্যবহার করতে হয় তা নিচে দেখানো হয়েছে:</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Var নোড: IXMLDOMNode;</h2> <p>একটি XMLDOMNode অবজেক্ট একটি নথি শাখার প্রতিনিধিত্ব করে। আমরা ইতিমধ্যেই এই বস্তুর সম্মুখীন হয়েছি যখন আমরা নথির মূল উপাদান পেয়েছি:</p><p>রুট:= XMLDoc.DocumentElement;</p><p>একটি XML নথির শাখা সম্পর্কে তথ্য পেতে, আপনি XMLDOMNode অবজেক্টের বৈশিষ্ট্যগুলি ব্যবহার করতে পারেন (সারণী 1)।</p> <p>একটি শাখায় সংরক্ষিত ডেটা অ্যাক্সেস করার জন্য, আপনি সাধারণত NodeValue প্রপার্টি (অ্যাট্রিবিউট, টেক্সট শাখা, মন্তব্য, প্রসেসিং নির্দেশাবলী এবং CDATA বিভাগের জন্য উপলব্ধ), টেক্সট প্রপার্টি, যেটি শাখার টেক্সট কন্টেন্ট ফেরত দেয়, অথবা NodeTypedValue প্রপার্টি ব্যবহার করেন। . পরেরটি, তবে, শুধুমাত্র টাইপ করা উপাদান সহ শাখাগুলির জন্য ব্যবহার করা যেতে পারে।</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3>ডকুমেন্ট ট্রি নেভিগেট করা হচ্ছে</h3> <p>XMLDOMNode অবজেক্ট ডকুমেন্ট ট্রি নেভিগেট করার অনেক উপায় প্রদান করে। উদাহরণ স্বরূপ, প্যারেন্ট ব্রাঞ্চ অ্যাক্সেস করার জন্য প্যারেন্টনোড প্রপার্টি (XMLDOMNode টাইপ) ব্যবহার করা হয়, চাইল্ড ব্রাঞ্চগুলি চাইল্ডনোডস (XMLDOMNodeList প্রকার), FirstChild এবং LastChild (XMLDOMNode টাইপ) বৈশিষ্ট্য ইত্যাদির মাধ্যমে অ্যাক্সেস করা হয়।</p> <p>OwnerDocument প্রপার্টি XMLDOMDocument টাইপের একটি অবজেক্ট ফেরত দেয় যা XML ডকুমেন্টকেই শনাক্ত করে। উপরে তালিকাভুক্ত বৈশিষ্ট্যগুলি আপনাকে সহজেই ডকুমেন্ট ট্রি নেভিগেট করতে দেয়।</p><p>এখন এক্সএমএল ডকুমেন্টের সমস্ত শাখায় যাওয়া যাক:</p><p>রুট:= XMLDoc.DocumentElement;</p> <p>I এর জন্য:= 0 থেকে Root.ChildNodes.Length-1 do Begin Node:= Root.ChildNodes.Item[I];</p><p>যদি Node.HasChildNodes তাহলে GetChilds(Node,0);</p><p>শেষ;</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3>উপরে উল্লিখিত হিসাবে, XMLDOMNode অবজেক্টের SelectNodes নথির শাখাগুলি অ্যাক্সেস করার আরও নমনীয় উপায় প্রদান করে। উপরন্তু, একটি SelectSingleNode পদ্ধতি রয়েছে যা নথির শুধুমাত্র প্রথম শাখা প্রদান করে। এই উভয় পদ্ধতিই আপনাকে শাখা অনুসন্ধানের জন্য XSL টেমপ্লেট নির্দিষ্ট করার অনুমতি দেয়।</h3> <p>সিডি শাখা এবং একটি PRICE উপশাখা আছে এমন সমস্ত শাখা পুনরুদ্ধার করতে সিলেক্টনোডস পদ্ধতি ব্যবহার করার প্রক্রিয়াটি চলুন:</p> <p>রুট:= XMLDoc.DocumentElement; নোড:= Root.SelectNodes('CD/PRICE');</p><p>CD শাখার সমস্ত PRICE উপ-শাখা নোড সংগ্রহে রাখা হবে। আমরা একটু পরে XSL টেমপ্লেটের আলোচনায় ফিরে আসব।</p><p>মনে রাখবেন যে এই উদাহরণে আমরা প্রথম চাইল্ড শাখা মুছে দিচ্ছি।</p><p>প্রথম শিশু শাখার প্রথম উপাদানটি কীভাবে সরিয়ে ফেলা যায় তা নীচে দেখানো হয়েছে:</p><p>Var XMLDoc: IXMLDOMDocument; <CD>…</CD>রুট: IXMLDOMNode; <TITLE>….

নোড: IXMLDOMNode;

XMLDoc:= CoDOMDocument.Create; XMLDoc.Async:= False; XMLDoc.Load('C:\DATA\DATA.xml'); <ARTIST>// মূল উপাদানটি পান রুট:= XMLDoc.DocumentElement; <COUNTRY>// এবং প্রথম চাইল্ড ব্রাঞ্চ নোড:= Root.FirstChild; <COMPANY>// প্রথম চাইল্ড শাখা নোড সরান। রিমুভ চাইল্ড(নোড। ফার্স্টচাইল্ড); <PRICE>উপরের উদাহরণে, আমরা প্রথম শাখাটি মুছে ফেলিনি <YEAR>, এবং শাখার প্রথম উপাদান হল</p><p>এখন একটি নতুন শাখা যোগ করা যাক. নীচে একটি নতুন মিউজিক সিডি-রম এন্ট্রি যোগ করার কোড দেখানো হয়েছে:</p> <ul><li>Var NewNode: IXMLDOMNode; <ul><li>শিশু: IXMLDOMNode;</li> <li>... // একটি নতুন শাখা তৈরি করুন -</li> <li>NewNode:= XMLDoc.CreateNode(1, 'CD', '');</li> <li>// একটি উপাদান যোগ করুন</li> </ul></li> <li>শিশু:= XMLDoc.CreateNode(1,'TITLE','');</li> </ul><p>// একটি উপাদান যুক্ত করুন NewNode.AppendChild(Child);</p> <h2>// এবং এর মান নির্ধারণ করুন চাইল্ড। পাঠ্য:= 'পিঙ্ক ফ্লয়েড';</h2> <p>XMLNodeList অবজেক্টে শাখাগুলির একটি তালিকা রয়েছে যা SelectNodes বা GetElementsByTagName পদ্ধতি ব্যবহার করে তৈরি করা যেতে পারে, বা ChildNodes সম্পত্তি থেকে প্রাপ্ত করা যেতে পারে।</p> <p>আমরা ইতিমধ্যেই "ডকুমেন্ট ট্রি নেভিগেট করা" বিভাগে দেওয়া উদাহরণে এই বস্তুটি ব্যবহার করে দেখেছি। এখানে আমরা কিছু তাত্ত্বিক মন্তব্য উপস্থাপন করছি।</p> <p>তালিকায় শাখার সংখ্যা দৈর্ঘ্য সম্পত্তির মান হিসাবে প্রাপ্ত করা যেতে পারে। শাখাগুলিতে 0 থেকে দৈর্ঘ্য -1 পর্যন্ত সূচী রয়েছে এবং প্রতিটি পৃথক শাখা সংশ্লিষ্ট সূচকের সাথে আইটেম অ্যারে উপাদানের মাধ্যমে অ্যাক্সেসযোগ্য।</p> <p>শাখাগুলির একটি তালিকার মাধ্যমে নেভিগেট করা NextNode পদ্ধতি ব্যবহার করেও করা যেতে পারে, যা তালিকার পরবর্তী শাখাটি প্রদান করে, অথবা যদি বর্তমান শাখাটি শেষ হয় তাহলে Nil।</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>তালিকার শুরুতে ফিরে যেতে, রিসেট পদ্ধতিতে কল করুন।</h2> <p>নথি তৈরি এবং সংরক্ষণ</p><p>এখন পর্যন্ত আমরা দেখেছি আপনি কীভাবে বিদ্যমান XML নথিতে শাখা এবং উপাদান যুক্ত করতে পারেন। <CATALOG></CATALOG>এখন ফ্লাইতে একটি XML ডকুমেন্ট তৈরি করা যাক। প্রথমত, আমরা আপনাকে মনে করিয়ে দিই যে একটি নথি শুধুমাত্র একটি URL থেকে নয়, একটি নিয়মিত স্ট্রিং থেকেও লোড করা যেতে পারে। নিম্নলিখিতটি দেখায় কিভাবে একটি রুট এলিমেন্ট তৈরি করতে হয়, যা তারপরে অন্যান্য উপাদানগুলিকে গতিশীলভাবে তৈরি করতে ব্যবহার করা যেতে পারে (যা আমরা ইতিমধ্যেই ম্যানিপুলেটিং চাইল্ড ব্রাঞ্চেস বিভাগে কভার করেছি):</p><p>Var XMLDoc: IXMLDOMDocument;</p> <p>রুট: IXMLDOMNode;</p> <p>নোড: IXMLDOMNode;</p><p>S: WideString;</p><p>... এস: = '</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>';</h2> <p>XMLDOMNode অবজেক্টের সিলেক্টনোডস পদ্ধতি নিয়ে আলোচনা করার সময়, আমরা উল্লেখ করেছি যে এটি নথির শাখাগুলি অ্যাক্সেস করার আরও নমনীয় উপায় প্রদান করে। নমনীয়তা এই সত্যের মধ্যে রয়েছে যে আপনি শাখা নির্বাচনের জন্য একটি মানদণ্ড হিসাবে একটি XSL টেমপ্লেট নির্দিষ্ট করতে পারেন। এই ধরনের টেমপ্লেটগুলি XML নথিতে তথ্য অনুসন্ধানের জন্য একটি শক্তিশালী প্রক্রিয়া প্রদান করে। উদাহরণস্বরূপ, আমাদের ক্যাটালগে সমস্ত সঙ্গীত CD-ROM শিরোনামের একটি তালিকা পেতে, আপনি নিম্নলিখিত প্রশ্নটি চালাতে পারেন:</p><p>মার্কিন যুক্তরাষ্ট্রে কোন শিল্পীদের ডিস্ক প্রকাশিত হয়েছিল তা খুঁজে বের করার জন্য, অনুরোধটি নিম্নরূপ গঠিত হয়েছে:</p><p>নোড:= Root.SelectNodes('CD/ARTIST');</p><p>ডিরেক্টরিতে প্রথম ড্রাইভটি কীভাবে খুঁজে পাবেন তা নিম্নলিখিতটি দেখায়:</p><p>নোড:= Root.SelectNodes('CD/TITLE');</p><p>এবং শেষটি:</p><p>নোড:= Root.SelectNodes('CD/TITLE');</p><p>বব ডিলান সিডি খুঁজে পেতে, আপনি নিম্নলিখিত ক্যোয়ারী চালাতে পারেন:</p><p>নোড:= Root.SelectNodes(‘CD[$any$ ARTIST= ”বব ডিলান”]/TITLE’);</p><p>এবং 1985 এর পরে প্রকাশিত ডিস্কগুলির একটি তালিকা পেতে, আমরা নিম্নলিখিত ক্যোয়ারীটি চালাই:</p><p>নোড:= Root.SelectNodes('CD/TITLE');</p><p>XSL সিনট্যাক্সের আরও বিস্তারিত আলোচনার জন্য একটি পৃথক পোস্ট প্রয়োজন। পাঠকদের কৌতুহলী করতে এবং আরও গবেষণাকে উত্সাহিত করতে, আমি XSL-এর সম্ভাব্য ব্যবহারের একটি ছোট উদাহরণ দেব। ধরা যাক আমাদের ক্যাটালগকে একটি নিয়মিত HTML টেবিলে রূপান্তর করতে হবে। ঐতিহ্যগত পদ্ধতি ব্যবহার করে, আমাদের অবশ্যই গাছের সমস্ত শাখার মধ্য দিয়ে যেতে হবে এবং প্রাপ্ত প্রতিটি উপাদানের জন্য উপযুক্ত ট্যাগ তৈরি করতে হবে। <TD>…</TD>.</p> <p>XSL ব্যবহার করে, আমরা কেবল একটি টেমপ্লেট (বা স্টাইল শীট) তৈরি করি যেখানে আমরা নির্দেশ করি কী রূপান্তর করা দরকার এবং কীভাবে। তারপরে আমরা আমাদের ডিরেক্টরিতে এই টেমপ্লেটটি ওভারলে করি - এবং আমরা সম্পন্ন করেছি: আমাদের কাছে একটি XSL টেমপ্লেটের পাঠ্য রয়েছে যা ডিরেক্টরিটিকে একটি টেবিলে রূপান্তর করে (তালিকা 2)।</p> <p>আমাদের ডিরেক্টরিতে XSL টেমপ্লেট ওভারলে করার কোডটি এইরকম দেখাচ্ছে:</p><p>পদ্ধতি TForm1.Button2Click(প্রেরক: TObject);</p><p>var XSLDoc: IXMLDOMDocument;</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>শুরু করুন XSLDoc:= CoDOMDocument.Create;</h2> <p>XSLDoc.Load('C:\DATA\DATA.xsl');</p> <p>Memo2.Text:= XMLDoc.TransformNode(XSLDoc);</p> <p>, যা ঘুরে ট্যাগগুলির মধ্যে অবস্থিত <br></p><p>আমি ইতিমধ্যেই লিখেছি, কিন্তু আমি একটি XML ফাইল দ্রুত পার্স করার এবং ডেটা বের করার আসল ক্ষেত্রে ফিরে যেতে চাই, যা আমি আজ কর্মক্ষেত্রে করেছি। প্রয়োজনীয় ডেটা পেতে আমার 5 মিনিটের বেশি সময় লাগেনি। <br></p><p>পটভূমি। আজ আমাদের ব্যবহারকারীদের কম্পিউটারে ইনস্টল করা প্রোগ্রাম সম্পর্কে ডেটা প্রক্রিয়া করতে হবে (হ্যাঁ, হ্যাঁ, আমরা জলদস্যু সনাক্ত করি :))। প্রযুক্তিগত বিভাগ আমাকে এই তথ্য সরবরাহ করেছে, WMI ব্যবহার করে নেটওয়ার্কে সন্দেহাতীত ব্যবহারকারীদের থেকে ছিনিয়ে নেওয়া হয়েছে। তারা যে প্রোগ্রামটি ব্যবহার করে তা XML ফর্ম্যাটে রিপোর্ট তৈরি করে। তদনুসারে, তারা আমাকে একটি বরং জটিল কাঠামো সহ এক্সএমএল ফাইলগুলির একটি পর্বত এনেছিল যেখান থেকে আমাকে কেবল ইনস্টল করা সফ্টওয়্যার পণ্যগুলির নাম বের করতে হবে। <br><span><br><p>আমি ইতিমধ্যে এই সম্পর্কে লিখেছি, কিন্তু আমি একটি দ্রুত বিশ্লেষণের আসল ক্ষেত্রে ফিরে যেতে চাই <br></p><p>XML ফাইল <br></p> <br>এবং ডেটা নিষ্কাশন আমি আজ কর্মস্থলে করেছি। প্রয়োজনীয় ডেটা পেতে আমার 5 মিনিটের বেশি সময় লাগেনি।</p><p>পটভূমি। আজ আমরা সম্পর্কে তথ্য প্রক্রিয়া করা প্রয়োজন <br>ইনস্টল করা প্রোগ্রাম <br>ব্যবহারকারীদের কম্পিউটারে (হ্যাঁ, হ্যাঁ, আমরা জলদস্যু সনাক্ত করি :))। প্রযুক্তিগত বিভাগ আমাকে এই তথ্য সরবরাহ করেছে, WMI ব্যবহার করে নেটওয়ার্কে সন্দেহাতীত ব্যবহারকারীদের থেকে ছিনিয়ে নেওয়া হয়েছে। তারা যে প্রোগ্রামটি ব্যবহার করে তা XML ফর্ম্যাটে রিপোর্ট তৈরি করে। তদনুসারে, তারা আমাকে একটি বরং জটিল কাঠামো সহ এক্সএমএল ফাইলগুলির একটি পর্বত এনেছিল যেখান থেকে আমাকে কেবল ইনস্টল করা সফ্টওয়্যার পণ্যগুলির নাম বের করতে হবে। <br>প্রক্রিয়াকরণ। ম্যানুয়ালি কয়েকটি ফাইল দেখার পরে, আমি বুঝতে পেরেছিলাম যে এটি দীর্ঘস্থায়ী হবে না এবং একটি ছোট রূপান্তরকারী লেখার সিদ্ধান্ত নিয়েছি। ডেলফি চালু করার পরে, আমি সংগ্রহস্থলে XML ডেটাবাইন্ডিং অবজেক্টটি নির্বাচন করেছি এবং এটিকে ফাইলগুলির মধ্যে একটি ফিড করেছি। আমি ডিফল্টরূপে সমস্ত সেটিংস এবং পরামিতি ছেড়ে দিয়েছি এবং ফলস্বরূপ আমি এই XML ফাইলের উপাদানগুলি অ্যাক্সেস করার জন্য প্রচুর সংখ্যক ক্লাস এবং ইন্টারফেস সহ একটি মডিউল তৈরি করেছি। আমি ক্লাস স্ট্রাকচার বের করতে খুব বেশি সময় ব্যয় করিনি এবং অবিলম্বে একটি রূপান্তরকারী লেখার দিকে চলে গেলাম।</p><p>নতুন কনসোল অ্যাপ্লিকেশনটিতে আমি বেশ সহজ কোড লিখেছি: <br>প্রোগ্রাম XML2TXT; <br>ব্যবহার করে <br>ফর্ম, <br>ক্লাস, SysUtils, <br>"SoftwareXML.pas" এ SoftwareXML; <br>পদ্ধতি CovertXML2Text; <br>var <br>CurDir:= IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)); <br>যদি FindFirst(CurDir+"*.xml", faAnyFile, sr) = 0 তাহলে <br>পুনরাবৃত্তি <br>ExportFile:= TStringList.Create; <br>সফটবেস:= LoadSTDSsoftware(Pchar(CurDir+sr.Name)); <br>i এর জন্য:= 0 থেকে softbase.InstalledSoftware.source.software.Count - 1 করতে <br>ExportFile.Add(softbase.InstalledSoftware.source.software[i].DisplayName); <br>ExportFile.Sort; <br>ExportFile.SaveToFile(CurDir+softbase.InstalledSoftware.Source.servername+."txt"); <br>ExportFile.Free; <br>FindNext(sr) 0 পর্যন্ত; <br>শেষ</p><p>var <br>আবেদন। আরম্ভ করা; <br>CovertXML2 Text; <br>শেষ <br></p><p>ফলস্বরূপ, আমি ইনস্টল করা সফ্টওয়্যারগুলির একটি তালিকা সহ নেটওয়ার্কের প্রতিটি কম্পিউটারের জন্য একটি পাঠ্য ফাইল তৈরি করেছি। <br></p><p>আমি মনে করি এই কোডের কিছু ব্যাখ্যা প্রয়োজন। উদাহরণস্বরূপ, কেন আমি একটি কনসোল অ্যাপ্লিকেশনে ফর্ম মডিউল ব্যবহার করেছি এবং অ্যাপ্লিকেশনকে কল করেছি। <br></p><p>এটি আসলে সহজ - এটি একটি ছোট হ্যাক যা আপনাকে একটি কনসোল অ্যাপ্লিকেশনে XML ডেটা বাইন্ডিং ব্যবহার করতে দেয়৷ কারণ এটি একগুঁয়েভাবে XML এর সাথে কাজ করার জন্য ক্লাস শুরু করতে অস্বীকার করেছিল। আমি এখনও আসল কারণ খুঁজে পাইনি - সময় আজ গুরুত্বপূর্ণ ছিল, আমি ইতিমধ্যে এই ত্রুটির সাথে লড়াই করার জন্য 5 মিনিটের মধ্যে 4টি ব্যয় করেছি। :) আমি মনে করি আমি পরে এই সমস্যাটি বের করব এবং লিখব আসল কারণ কী। <br></p><p>অদ্ভুত সফ্টবেস ক্লাসটি একটি XML ফাইলের উপর ভিত্তি করে তৈরি করা হয়েছিল - এটি ছিল মূল উপাদানটির নাম এবং softbase.InstalledSoftware.source.software[i].DisplayName - কেবল নেস্টেড উপাদানগুলির মাধ্যমে কাঙ্খিতটিতে নেভিগেট করুন এবং এর মান পান৷ <br></p><p>এটি আসলে ডেলফিতে XML এর সাথে কাজ করার দ্রুততম উপায়গুলির মধ্যে একটি। <br></p> <p>সম্প্রতি, ই-বিজনেস সিস্টেম তৈরির জন্য অনেক মনোযোগ দেওয়া হয়েছে, বা যেমন এগুলিকে বলা হয় - B2B (ব্যবসা থেকে ব্যবসা)। ইন্টারনেট প্রযুক্তি সমন্বয়কারী সংস্থার এক্সচেঞ্জ স্ট্রিমিং সিস্টেম তৈরির জন্য সুপারিশগুলি বিবেচনায় নিয়ে - WWW কনসোর্টিয়াম: XML প্রযুক্তি এবং XML নথি বিনিময় সিস্টেম নির্মাণের উপর জোর দেওয়া হয়।</p> <p>ইলেকট্রনিক ব্যবসায় XML ব্যবহার করার সুবিধা হল কাঠামোগত তথ্যের সুস্পষ্ট এবং ভিজ্যুয়াল উপস্থাপনা, আধুনিক নেটওয়ার্ক প্রোটোকল ব্যবহার করার ক্ষমতা এবং রিয়েল-টাইম বিজনেস সিস্টেম তৈরি করার কারণে এর তৈরির কম খরচে B2B সিস্টেমের উচ্চ দক্ষতা।</p> <p>XML নথির আকারে তথ্য উপস্থাপনের স্বাধীনতা ইলেকট্রনিক ব্যবসায় অংশগ্রহণকারী বিভিন্ন কোম্পানিকে একে অপরের থেকে স্বাধীন সফটওয়্যার তৈরি করতে দেয়।</p> <p>সমস্ত সিস্টেমে, এক্সচেঞ্জ সাধারণত একই স্কিম অনুসারে তৈরি করা হয়, HTTP অনুরোধগুলি ব্যবহার করে। SSL প্রোটোকল একটি তথ্য নিরাপত্তা প্রোটোকল হিসাবে ব্যবহৃত হয় (কিন্তু এটি একটি পৃথক বিষয়)।</p> <p>XML বার্তা প্রক্রিয়াকরণের সম্ভাব্য বিকল্পগুলির মধ্যে একটি হল BIN/CGI (ISAPI) অ্যাপ্লিকেশন বা COM (সার্ভার) উপাদানগুলি তৈরি করা যা XML নথি তৈরি বা প্রক্রিয়া করে।</p> <p>একদিকে, অ্যাপ্লিকেশনটি একটি ক্লায়েন্ট হিসাবে কাজ করে যা POST মোডে একটি HTTP অনুরোধ জারি করে, অন্যদিকে, একটি WEB সার্ভার রয়েছে যার পাশে অনুরোধটি প্রক্রিয়া করা হয় এবং প্রতিক্রিয়া জারি করা হয়। XML নথি তথ্য বিনিময় ব্যবহার করা হয়.</p> <p>সবচেয়ে কার্যকরী বাস্তবায়ন বিকল্পগুলির মধ্যে একটি হল একটি বিদ্যমান XML পার্সার ব্যবহার করা যা DOM মডেলকে সমর্থন করে। এই পার্সারটি Win`98 এর একটি বিতরণ প্যাকেজ বা IE 4.7 এবং উচ্চতর একটি উপাদান (Win`95 এর জন্য) এবং এটি msxml.dll লাইব্রেরিতে অবস্থিত একটি COM সার্ভারের প্রতিনিধিত্ব করে৷</p> <p>কম্পোনেন্ট অবজেক্ট মডেল (COM) - একটি একক সত্তার মধ্যে এনক্যাপসুলেটেড ডেটা এবং পদ্ধতিগুলি উপস্থাপন করে এবং ইন্টারফেসের একটি সিস্টেমের মাধ্যমে সেগুলি অ্যাক্সেস করার উপায়। ডেলফি ব্যবহার করে, একটি COM অবজেক্টের ক্লাসগুলি অ্যাক্সেস করা বেশ সহজ (একটি COM সার্ভারে বেশ কয়েকটি ক্লাস অন্তর্ভুক্ত করা যেতে পারে)। ইন্টারফেসের একটি সিস্টেমের মাধ্যমে ক্লাসের একটি উদাহরণ শুরু করে অবজেক্টগুলি অ্যাক্সেস করা হয়। ইন্টারফেসের বর্ণনা ইন্টারফেস ডেফিনিশন ল্যাঙ্গুয়েজ (IDL) দ্বারা বাহিত হয়, যা পরিবেশ ব্যবহার করে স্বয়ংক্রিয়ভাবে করা যায়।</p> <p>একটি COM সার্ভার থেকে ডেলফি সরঞ্জাম আমদানি করে <i>msxml.dll</i>, IDL ইন্টারফেস বর্ণনা ফাইল এবং লাইব্রেরি ধরনের একটি বাইনারি বর্ণনা ফাইল - TLB - নির্মিত হয়। এই অপারেশন সিস্টেম মেনু মাধ্যমে সঞ্চালিত হয়: <b>প্রকল্প | লাইব্রেরি আমদানির ধরন:</b>(চিত্র 1)। এরপরে, একটি ডায়ালগ বক্স প্রদর্শিত হবে (চিত্র 2), যেখানে আপনাকে একটি COM অবজেক্ট নির্বাচন করতে হবে (আমাদের ক্ষেত্রে, বস্তুটি "Microsoft.XMLDom (সংস্করণ 2.0)" নামে নিবন্ধিত) এবং একটি TLB ফাইল তৈরি করতে হবে (বোতাম <b>ইউনিট তৈরি করুন</b>) TLB ফাইল ব্যবহার করে, পরিবেশ একটি "Pascal" COM সার্ভার বর্ণনা ফাইল তৈরি করে - MSXML_TLB.pas</p> <p>MSXML_TLB.pas ফাইলটি COM সার্ভারের সমস্ত ইন্টারফেস, ধ্রুবক এবং সহ-শ্রেণী বর্ণনা করে।</p> <p>COM উপাদান অবজেক্ট অ্যাক্সেস করতে, এটি নির্দেশে প্রয়োজনীয় <b>ব্যবহার করে</b>লাইব্রেরি বর্ণনা ফাইলের নাম যোগ করুন (MSXML_TLB.pas)। নীচে একটি সাধারণ প্রোগ্রাম যা স্ট্যান্ডার্ড DOM পার্সার msxml.dll ব্যবহার করে, যা একটি XML নথি লোড করে এবং এটি Memo1 পাঠ্য ক্ষেত্রের উপাদানে প্রদর্শন করে।</p> <b>ব্যবহার করে</b> Windows, Messages, SysUtils, ক্লাস, গ্রাফিক্স, কন্ট্রোল, ফর্ম, ডায়ালগ, OleServer, MSXML_TLB, StdCtrls; <b>টাইপ</b> TForm1 = <b>ক্লাস</b>(TForm)Button1: TButton; <b>Memo1: TMemo;</b>পদ্ধতি <b>বোতাম 1 ক্লিক (প্রেরক: TObject);</b> <b>শেষ</b> var <b>ফর্ম 1: TForm1;</b>বাস্তবায়ন <b>($R *.DFM)</b>পদ্ধতি <span>TForm1.Button1Click(প্রেরক: Tobject);</span> <b>শেষ</b>// DOMDocument অবজেক্টের একটি কোক্লাসের ঘোষণা; <span>coDoc: CoDOMDocument;</span> <b>শেষ</b>// IDOMDocument ইন্টারফেসের সাথে সামঞ্জস্যপূর্ণ ক্লাস; <b>ডক: IXMLDOMDocument;</b> <span>শুরু</span>// একটি DOMDocument অবজেক্টের একটি উদাহরণ তৈরি করা; <span>ডক:= coDoc.Create;</span>// একটি DOMDocument অবজেক্ট ইনস্ট্যান্সের লোড পদ্ধতি কল করা; <span>Doc.load("data.xml");</span>// DOMDocument অবজেক্ট ইনস্ট্যান্সের xml সম্পত্তিতে অ্যাক্সেস; <b>Memo1.Text:=Doc.xml;</b> <b>শেষ</b> <h2>শেষ</h2> <p>প্রতিটি XML নথিকে অনেকগুলি বস্তুর (শ্রেণী) সেট হিসাবে উপস্থাপন করা হয়, যার সাহায্যে পৃথক উপাদানগুলিতে (অবজেক্ট ক্ষেত্র) অ্যাক্সেস সম্ভব। DOM - ইন্টারফেস DOMString বা CharacterData প্রকারের উভয় সাধারণ বস্তু এবং XML নথির অংশ বা পৃথক উপাদানগুলিতে অ্যাক্সেস বর্ণনা করে: DOMFragmentElement, DOMNode, DOMlement।</p> <p>নীচে XMLDOMNode, XMLDOMNode, XMLDOMNodeList অবজেক্টের সবচেয়ে গুরুত্বপূর্ণ বৈশিষ্ট্য এবং পদ্ধতি রয়েছে। এটি লক্ষ করা উচিত যে নীচে উপস্থাপিত DOM অবজেক্টের (ডকুমেন্ট অবজেক্ট মডেল) পদ্ধতি এবং কার্যাবলী Microsoft XML পার্সার msxml.dll দ্বারা ব্যবহৃত হয় এবং W3C কনসোর্টিয়াম দ্বারা অনুমোদিত DOM মডেলের চেয়ে কিছুটা বিস্তৃত।</p> <p>DOM অবজেক্ট ইন্টারফেসের আরও সম্পূর্ণ বিবরণ পাওয়া যাবে</p> <table cellspacing="0" cellpadding="4" width="500" border="1"><tbody><tr><td valign="top" colspan="2">XMLDOMD ডকুমেন্ট অবজেক্ট</td> </tr><tr><td valign="top" colspan="2">অবজেক্ট হায়ারার্কির শীর্ষ স্তরের প্রতিনিধিত্ব করে এবং একটি নথির সাথে কাজ করার পদ্ধতি ধারণ করে: এটি লোড করা, এটি বিশ্লেষণ করা, উপাদান তৈরি করা, গুণাবলী, এতে মন্তব্য করা ইত্যাদি। .</td> </tr><tr><td valign="top" colspan="2"><b>বৈশিষ্ট্য</b> </td> </tr><tr><td valign="top" width="39%"><b>অ্যাসিঙ্ক</b> </td> <td valign="top" width="61%">বর্তমান প্রক্রিয়াকরণ মোড সনাক্তকারী সম্পত্তি</td> </tr><tr><td valign="top" width="39%" height="19"><b>পার্সের ত্রুটি</b> </td> <td valign="top" width="61%" height="19">XMLDOMParseError ত্রুটি হ্যান্ডলিং অবজেক্টের একটি রেফারেন্স প্রদান করে</td> </tr><tr><td valign="top" width="39%"><b>সক্ষম করুন - নথি যাচাইকরণ নিষ্ক্রিয় করুন।</b> </td> <td> </td> </tr><tr><td valign="top" width="39%"><b>url</b> </td> <td valign="top" width="61%">নথির URL প্রদান করে</td> </tr><tr><td valign="top" width="39%"><b>নথি উপাদান</b> </td> <td valign="top" width="61%">একটি XMLDomelement অবজেক্ট হিসাবে নথির মূল উপাদানের একটি রেফারেন্স রয়েছে৷</td> </tr><tr><td valign="top" colspan="2"><b>পদ্ধতি</b> </td> </tr><tr><td valign="top" width="39%"><b>লোড(url) <br>loadXML(xmlString)</b> </td> <td valign="top" width="61%">একটি XML নথি লোড করে,</td> </tr><tr><td valign="top" width="39%"><b>সংরক্ষণ করুন(অবজেক্ট টার্গেট)</b> </td> <td valign="top" width="61%">একটি ফাইলে একটি XML নথি সংরক্ষণ করে</td> </tr><tr><td valign="top" width="39%"><b>গর্ভপাত</b> </td> <td valign="top" width="61%">ডকুমেন্ট লোডিং এবং প্রসেসিং প্রক্রিয়ায় ব্যাঘাত ঘটাচ্ছে।</td> </tr><tr><td valign="top" width="39%"><b>CreateAtribute(নাম)</b> </td> <td valign="top" width="61%">বর্তমান উপাদানের জন্য নির্দিষ্ট নামের সাথে একটি নতুন বৈশিষ্ট্য তৈরি করে।</td> </tr><tr><td valign="top" width="39%"><b>CreateNode (টাইপ, নাম, nameSpaceURI)</b> </td> <td valign="top" width="61%">নির্দিষ্ট টাইপ এবং নামের একটি নোড তৈরি করে</td> </tr><tr><td valign="top" width="39%"><b>createElement(ট্যাগনাম)</b> </td> <td valign="top" width="61%">নির্দিষ্ট নামের সাথে একটি নথি উপাদান তৈরি করে।</td> </tr><tr><td valign="top" width="39%"><b>টেক্সটনোড তৈরি করুন(ডেটা)</b> </td> <td valign="top" width="61%">একটি নথির ভিতরে পাঠ্য তৈরি করে</td> </tr><tr><td valign="top" width="39%"><b>getElementsByTagName(ট্যাগনাম)</b> </td> <td valign="top" width="61%">প্রদত্ত নাম সহ নথি উপাদানগুলির একটি সংগ্রহের একটি রেফারেন্স প্রদান করে</td> </tr><tr><td valign="top" width="39%"><b>nodeFromID(idString)</b> </td> <td valign="top" width="61%">আইডি দ্বারা একটি উপাদান জন্য অনুসন্ধান</td> </tr></tbody></table><br><table cellspacing="0" cellpadding="4" width="500" border="1"><tbody><tr><td valign="top" colspan="2"> <b>XMLDOMNode অবজেক্ট</b> </td> </tr><tr><td valign="top" colspan="2">একটি XMLDOMNode অবজেক্ট যা মৌলিক DOM ইন্টারফেস প্রয়োগ করে <b>নোড</b>, নথি গাছের একটি একক নোড ম্যানিপুলেট করার উদ্দেশ্যে। এর বৈশিষ্ট্য এবং পদ্ধতিগুলি আপনাকে বর্তমান নোড সম্পর্কে সম্পূর্ণ তথ্য পেতে এবং পরিবর্তন করতে দেয় - এর ধরন, নাম, পুরো নাম, এর বিষয়বস্তু, চাইল্ড উপাদানের তালিকা ইত্যাদি।</td> </tr><tr><td valign="top" colspan="2"><b>বৈশিষ্ট্য</b> </td> </tr><tr><td valign="top" width=" "><b>nodeName, baseName</b> </td> <td valign="top" width="65%">বর্তমান নোডের নাম প্রদান করে।</td> </tr><tr><td valign="top" width="35%"><b>উপসর্গ</b> </td> <td valign="top" width="65%">নেমস্পেস উপসর্গ প্রদান করে।</td> </tr><tr><td valign="top" width="35%"><b>ডেটা টাইপ</b> </td> <td valign="top" width="65%">বর্তমান নোডের বিষয়বস্তুর ধরন নির্ধারণ করে</td> </tr><tr><td valign="top" width="35%"><b>nodeType, nodeTypeString</b> </td> <td valign="top" width="65%">বর্তমান নোডের ধরন প্রদান করে:</td> </tr><tr><td valign="top" width="35%"><b>গুণাবলী</b> </td> <td valign="top" width="65%">XMLDOMNamedNodeMap-এর সংগ্রহ হিসাবে বর্তমান নোডের বৈশিষ্ট্যগুলির একটি তালিকা প্রদান করে।</td> </tr><tr><td valign="top" width="35%"><b>পাঠ্য</b> </td> <td valign="top" width="65%">পাঠ্য হিসাবে বর্তমান সাবট্রির বিষয়বস্তু প্রদান করে</td> </tr><tr><td valign="top" width="35%"><b>xml</b> </td> <td valign="top" width="65%">বর্তমান সাবট্রির একটি XML উপস্থাপনা প্রদান করে।</td> </tr><tr><td valign="top" width="35%"><b>nodeValue</b> </td> <td valign="top" width="65%">বর্তমান নোডের বিষয়বস্তু প্রদান করে।</td> </tr><tr><td valign="top" width="35%"><b>চাইল্ড নোড</b> </td> <td valign="top" width="65%">একটি XMLDOMNodeList হিসাবে চাইল্ড উপাদানগুলির একটি তালিকা প্রদান করে।</td> </tr><tr><td valign="top" width="35%"><b>প্রথম সন্তান, শেষ সন্তান</b> </td> <td valign="top" width="65%">প্রথম/শেষ চাইল্ড উপাদান প্রদান করে</td> </tr><tr><td valign="top" width="35%"><b>আগের ভাইবোন, পরবর্তী ভাইবোন</b> </td> <td valign="top" width="65%">পূর্ববর্তী/পরবর্তী সহোদর উপাদান প্রদান করে।</td> </tr><tr><td valign="top" width="35%"><b>প্যারেন্ট নোড</b> </td> <td valign="top" width="65%">মূল উপাদানের একটি লিঙ্ক রয়েছে।</td> </tr><tr><td valign="top" width="35%"><b>মালিক নথি</b> </td> <td valign="top" width="65%">বর্তমান নোডটি অবস্থিত নথিতে একটি পয়েন্টার প্রদান করে।</td> </tr><tr><td valign="top" colspan="2"><b>পদ্ধতি</b> </td> </tr><tr><td valign="top" width="35%"><b>appendChild(নতুন শিশু)</b> </td> <td valign="top" width="65%">বর্তমান নোডে একটি নতুন চাইল্ড এলিমেন্ট যোগ করে।</td> </tr><tr><td valign="top" width="35%"><b>InsertBefore(নতুন শিশু, রেফচাইল্ড)</b> </td> <td valign="top" width="65%">একটি চাইল্ড নোড সন্নিবেশ করায়, এটিকে refChild প্যারামিটার দ্বারা নির্দিষ্ট করা নোডের "বাম দিকে" বর্তমান সাবট্রিতে অবস্থান করে।</td> </tr><tr><td valign="top" width="35%"><b>ক্লোননোড (গভীর)</b> </td> <td valign="top" width="65%">বর্তমান উপাদানের একটি অনুলিপি তৈরি করুন।</td> </tr><tr><td valign="top" width="35%"><b>getAttribute</b><b>(নাম) <br> </b><b>getAttributeNode</b><b><span>(নাম) <br>সেট অ্যাট্রিবিউট (নাম, মান) <br>setAttributeNode(XMLDOMAattribute)</span> </b> </td> <td valign="top" width="65%">একটি বস্তুর বৈশিষ্ট্য (তৈরি, পড়া, লিখুন) অ্যাক্সেস. নাম হল গুণের নাম, মান হল তার মান। একটি XMLDOMAattribute অবজেক্টের মান প্রদান করে।</td> </tr><tr><td valign="top" width="35%"><b>প্রতিস্থাপনচাইল্ড(নতুন শিশু, পুরাতন শিশু) অপসারণ শিশু(পুরাতন শিশু)</b> </td> <td valign="top" width="65%">চাইল্ড অবজেক্টের বর্তমান তালিকার OldChild অবজেক্টকে newChild দিয়ে প্রতিস্থাপন করে। OldChild অবজেক্ট মুছে ফেলা হচ্ছে</td> </tr><tr><td valign="top" width="35%"><b>সিলেক্ট নোডস(প্যাটার্নস্ট্রিং) সিলেক্ট সিঙ্গেল নোড(প্যাটার্নস্ট্রিং)</b> </td> <td valign="top" width="65%">অনুসন্ধান প্যাটার্ন বা প্রথম নোড দ্বারা নির্বাচিত XMLDOMNodeList বস্তু ফেরত দেয়</td> </tr><tr><td valign="top" width="35%"><b>ট্রান্সফর্ম নোড (স্টাইলশীট) <br>transformNodeToObject(স্টাইলশীট, আউটপুটঅবজেক্ট)</b> </td> <td valign="top" width="65%">বর্তমান নোডের সাবট্রিতে একটি স্টাইল শীট বরাদ্দ করে এবং একটি স্ট্রিং প্রদান করে - প্রক্রিয়াকরণের ফলাফল। XSL নির্দেশাবলী ধারণকারী DOMDocument অবজেক্টের একটি রেফারেন্স একটি প্যারামিটার হিসাবে পাস করা হয়।</td> </tr></tbody></table><br><h2>ব্যবসায় XML ব্যবহার করা।</h2> <p>একটি পরিষ্কার চিত্রের জন্য, এটি কীভাবে কাজ করে তা বোঝার জন্য কেন এই সমস্ত প্রয়োজন তার একটি ব্যাখ্যা প্রয়োজন:</p> <p>একটি B2B বা কর্পোরেট ইআরপি সিস্টেম তৈরি করার সময়, কোম্পানির উদ্যোগ বা শাখাগুলির মধ্যে XML নথির তথ্য বিনিময়ের আয়োজন করার সময়, HTTP প্রোটোকলের মাধ্যমে বিদ্যমান WEB সার্ভারের উপর ভিত্তি করে একটি কার্যকরভাবে প্রমাণিত তথ্য স্থানান্তর ব্যবস্থা ব্যবহার করা হয়।</p> <p>একদিকে, অ্যাপ্লিকেশনটি একটি ক্লায়েন্ট হিসাবে কাজ করে, যা POST মোডে একটি HTTP অনুরোধ জারি করে, অন্যদিকে, একটি WEB সার্ভার রয়েছে, যার দিকে অনুরোধটি প্রক্রিয়া করা হয় এবং প্রতিক্রিয়া জারি করা হয়। এক্সএমএল নথি বিনিময় হিসাবে ব্যবহার করা হয়.</p> <p>উদাহরণস্বরূপ, একটি সাধারণ কর্পোরেট ইআরপি সিস্টেমে, একটি অ্যাকাউন্টিং প্রোগ্রাম (ASU Bukhuchet) একটি চালান ইস্যু করার জন্য একটি নির্দিষ্ট অনুরোধ তৈরি করতে হবে এবং এটিকে একটি গুদাম (ASU ওয়ারহাউস) আছে এমন একটি শাখায় স্থানান্তর করতে হবে। AWP একটি B2B সিস্টেম তৈরি করার সময় সমস্যার একটি অনুরূপ প্রণয়ন, যখন এন্টারপ্রাইজ A সরবরাহকারী B থেকে পণ্যের প্রাপ্যতা (একটি ক্রয় অর্ডার দেয়) অনুরোধ করে।</p> <p>এন্টারপ্রাইজ A এবং এর প্রোগ্রাম একটি ক্লায়েন্ট হিসাবে কাজ করে। গুদামটি সরবরাহকারী বি দ্বারা পরিসেবা করা হয়, যার একটি SQL সার্ভারে একটি গুদাম ডাটাবেস কমপ্লেক্স রয়েছে। বিনিময়টি সরবরাহকারী বি-এর কর্পোরেট ওয়েব সার্ভারের মাধ্যমে সম্পাদিত হয়।</p> <p>নিম্নলিখিত সাধারণ বিনিময় অ্যালগরিদম নীচে উপস্থাপন করা হয়েছে:</p> <br>চিত্র 3। <ol><li><b>এন্টারপ্রাইজ এ</b>সূচনা করে <b>প্রক্রিয়া A</b>(পণ্য অর্ডার), যা একটি WEB ক্লায়েন্ট হিসাবে কাজ করে।</li><li><b>প্রক্রিয়া A</b>একটি XML নথি তৈরি করে (উদাহরণস্বরূপ, একটি চালানের অনুরোধ) এবং সরবরাহকারী B-এর WEB সার্ভারে এটি একটি POST HTTP অনুরোধ হিসাবে প্রেরণ করে৷ প্রক্রিয়াকরণ অ্যাপ্লিকেশনটির সংস্থান সনাক্তকারী একটি URI হিসাবে ব্যবহৃত হয়৷ URI সব ধরনের নথির জন্য একই হতে পারে, অথবা প্রতিটি ধরনের জন্য পৃথক হতে পারে। এটি সব B2B (WEB) সার্ভারের কাঠামোর উপর নির্ভর করে।</li><li>WEB সার্ভার অনুরোধটি বিশ্লেষণ করে এবং একটি সার্ভার তৈরি করে <b>প্রক্রিয়া বি</b>, একটি পরামিতি হিসাবে XML নথির অংশ পাস করা। <br>প্রসেস বি WEB সার্ভার দ্বারা চালু করা হয় এবং হয় একটি ASP পৃষ্ঠা, একটি CGI (ISAPI) অ্যাপ্লিকেশন বা JAVA সার্ভারলেট (সার্ভার অ্যাপ্লিকেশন) হিসাবে প্রক্রিয়া করা হয়।</li><li><b>প্রক্রিয়া বি</b>- SQL ডাটাবেস সার্ভারে একটি অনুরোধ তৈরি করে।</li><li>এসকিউএল সার্ভার ডাটাবেসে প্রয়োজনীয় ক্রিয়াকলাপ সম্পাদন করে, একটি প্রতিক্রিয়া তৈরি করে এবং এটি ফেরত দেয় <b>প্রক্রিয়া বি</b>.</li><li>SQL সার্ভার থেকে প্রতিক্রিয়া উপর ভিত্তি করে <b>প্রক্রিয়া বি</b>একটি XML নথি (প্রতিক্রিয়া) তৈরি করে এবং ক্লায়েন্ট অ্যাপ্লিকেশনে একটি http অনুরোধের প্রতিক্রিয়া হিসাবে এটি ফেরত দেয়।</li><li>এরপরে, ক্লায়েন্ট পক্ষের পরিস্থিতির উপর নির্ভর করে, হয় একটি নতুন http অনুরোধ তৈরি হয় বা সেশন শেষ হয়।</li> </ol><h2>নথি প্রবাহের সংগঠন সম্পর্কে কয়েকটি শব্দ।</h2> <p>একটি XML নথি বিনিময় সিস্টেম বিকাশের জন্য সাধারণ নিয়ম হল:</p><ul><li><b>প্রথমত</b>- ইলেকট্রনিক নথি এবং তাদের কাঠামোর একটি প্রবাহ চিত্রের বিকাশ;</li><li><b>দ্বিতীয়ত</b>- প্রক্রিয়া ফাংশনের টেবিলের বিকাশ (সাবপ্রসেস), যেমন প্রতিটি প্রক্রিয়া বাস্তবায়ন করবে কোন এক্সএমএল নথির সাথে সম্পর্কিত কোন কাজ।</li> </ul><p>প্রতিটি XML নথি, একটি HTML নথির মতো, অবশ্যই একটি বার্তা শিরোনাম (তথ্য ট্যাগগুলিতে আবদ্ধ) এবং একটি বার্তার অংশ (একটি অনুরোধের জন্য, অনুরোধের প্রতিক্রিয়া জানাতে এই তথ্যটি ট্যাগগুলিতে আবদ্ধ) থাকতে হবে। XML নথিটি সঠিকভাবে তৈরি করার জন্য, এটির দুটি উপাদান "হেডার" এবং "অনুরোধ" ট্যাগ সহ ফ্রেম করা প্রয়োজন, উদাহরণস্বরূপ। স্ট্যান্ডার্ড নথির ধরন নীচে উপস্থাপন করা হয়েছে:</p> <p>শিরোনাম (চিত্র 4), একটি HTML নথির বিপরীতে, বিভিন্ন ধরনের পরিষেবার তথ্য থাকতে হবে, যার মধ্যে নথির ধরণ এবং তার প্রক্রিয়াকরণের প্রক্রিয়া সম্পর্কে তথ্য রয়েছে। নথির মূল অংশ তথ্য প্রক্রিয়াকরণে প্রবেশ করে, যেমন ট্যাগ দিয়ে তৈরি বিষয়বস্তু। এটি লক্ষ করা উচিত যে শিরোনামগুলির গঠন সমস্ত ধরণের নথির জন্য একই হতে হবে।</p> <p>সার্ভার দ্বারা চালু করা একটি প্রক্রিয়ার জন্য, প্রক্রিয়াকরণ অ্যালগরিদমটি পছন্দ করে (কিন্তু অগত্যা নয়) নিম্নরূপ তৈরি করা হয়:</p> <img src='https://i0.wp.com/codenet.ru/np-includes/upload/2005/01/05/128666.jpg' height="500" width="408" loading=lazy loading=lazy><br>চিত্র 6. <h2>ক্লায়েন্ট অংশ তৈরি করার সময় কিছু মৌলিক পয়েন্ট</h2> <p>যেমনটি ইতিমধ্যে ব্যাখ্যা করা হয়েছে, একটি XML নথি তৈরি করার সময়, একটি DOM মডেলের আকারে এর উপস্থাপনা ব্যবহার করা হয়। নীচে একটি xml বার্তা শিরোনাম তৈরি করার জন্য প্রোগ্রামের ডেলফি পাঠ্যের অংশের একটি উদাহরণ।</p> <b>Memo1: TMemo;</b> TThread1. HeaderCreate(প্রেরক: Tobject); <b>শেষ</b> <span>// একটি কোক্লাসের ঘোষণা, তৈরি করতে প্রয়োজনীয়</span> coDoc: CoDomDocument; <span>// XMLDomDocument অবজেক্ট</span>ডক: DomDocument; <b>ডক: IXMLDOMDocument;</b> <span>r: IXMLDomelement;</span>নোড: IXMLDOMelement; <span>// DOMText txt: IXMLDOMText;</span>// DOMAattribute attr: IXMLDOMAattribute; <Header/>"); <span>// একটি DOM নথি তৈরি করা<<b>ডক:=coDoc.Create;</b>>) </span> Doc.Set_async(false); <span>// DOM নথির প্রাথমিক সূচনা <b>Doc.LoadXML("</b>" </span>// ডোমেলিমেন্ট তৈরি করা (ট্যাগ <span>প্রেরক<<b>ডক:=coDoc.Create;</b>নোড:= Doc.createElement("প্রেরক");</span> <span>// একটি পাঠ্য নোড তৈরি করুন " <b>Doc.LoadXML("</b>" </span>এলএলসি "টাইফুন" <span>txt:= Doc.createTextNode("Typhoon LLC");<<b>ডক:=coDoc.Create;</b>// নোডে অ্যাসাইনমেন্ট</span>> মান <span> <<b>// টেক্সট নোড "</b>> </span> Node.appendChild(txt); <span>// একটি উপাদান যোগ করা<<b>> শিশু হিসাবে নথির মূলে</b>> </span> r.appendChild(নোড); <span>থেকে</span>নোড:= Doc.createElement("From"); <span>txt:= Doc.createTextNode("http://tayfun.ru/xml/default.asp");</span> Node.appendChild(txt); <span> // <TypeDocument Id="Order"/> </span> r.appendChild(নোড); <b>Memo1.Text:=Doc.xml;</b> <p>// ট্যাগের জন্য অনুরূপ অপারেশন</p> <p>প্রতি</p> <img src='https://i2.wp.com/codenet.ru/np-includes/upload/2005/01/05/128662.gif' height="116" width="298" loading=lazy loading=lazy><br>চিত্র 5। <p><img src='https://i1.wp.com/codenet.ru/np-includes/upload/2005/01/05/128664.gif' height="179" width="385" loading=lazy loading=lazy><br>চিত্র 6.</p><p>XML নথির আকারে তথ্য প্রেরণের প্রধান সুবিধা হল DBMS-এ প্রাপ্ত এবং প্রেরণকারী উভয় দিকেই স্বাধীন টেবিল কাঠামো ব্যবহার করে একটি বার্তা তৈরি করা সম্ভব। আমাদের উদাহরণ ব্যবহার করে, আসুন আমরা ধরে নিই যে চিত্র 6-এ দেখানো কাঠামো সহ একটি DBMS থেকে এন্টারপ্রাইজ A-এর চালান সম্পর্কে তথ্য স্থানান্তর করতে হবে</p> <p>একটি চালান ধারণকারী একটি xml নথি তৈরি করতে, একটি SQL ক্যোয়ারী (ক্যোয়ারী A) প্রাথমিকভাবে ইনভয়েস সম্পর্কে তথ্য দিয়ে তৈরি করা হয়:</p> <b>নির্বাচন করুন</b>* ইনভয়েস_জেনারেল থেকে <b>কোথায়</b>চালান সংখ্যা = : সংখ্যা <b>নির্বাচন করুন</b>পণ্য, গুণমান, মূল্য, HZ_cod <b>থেকে</b>মাল <b>কোথায়</b>চালান সংখ্যা = : সংখ্যা <span>// :num - প্যারামিটার যা চালান নম্বর নির্দিষ্ট করে।</span> <p>নীচে প্রোগ্রামের অংশ যা xml নথির বডি গঠন করে:</p> <b>Memo1: TMemo;</b> TThread1.DataBodyCreate(প্রেরক: Tobject); <b>শেষ</b> <span>// একটি কোক্লাস এবং একটি XMLDomDocument অবজেক্টের ঘোষণা</span>//coDoc: CoDomDocument ; <span>// সমগ্র মডিউলের জন্য বিশ্বব্যাপী হতে হবে।</span>//Doc: DomDocument ; <span>// DMElement অবজেক্টের ঘোষণা</span> r: IXMLDomelement; <span>// ডোমেলিমেন্ট; <b>নোড, নোড 2: IXMLDOMelement;</b> Node3, Node4: IXMLDOMelement; <b>// DOMText txt: IXMLDOMText;</b> str: স্ট্রিং;</span> <b>ডক: IXMLDOMDocument;</b>// চালান নম্বর: <span>পূর্ণসংখ্যা</span>- গ্লোবাল ভেরিয়েবল - // এর মান আছে 987654 // queryA, queryB: <span>স্ট্রিং;</span>- গ্লোবাল ভেরিয়েবল, // অনুরোধের সাথে সম্পর্কিত একটি মান রয়েছে // queryA - অনুরোধ চালান সম্পর্কে একটি সাধারণ তথ্য // queryB - অনুরোধ বি // চালানে বর্ণিত পণ্য সম্পর্কে তথ্য (পাঠ্য দেখুন) <span>প্রশ্ন. বন্ধ করুন;</span>// "কোয়েরি A" পাঠ্যটি দেখুন <span>Query.Text:= queryA;</span>// অনুরোধটি কার্যকর করুন <span>Query.ExecSQL;</span>প্রশ্ন. খুলুন; <span>// রুট এলিমেন্টের ঠিকানা পাচ্ছেন</span> r:=Doc.Get_documentElement; <span>Query.Text:= queryA;</span> Node2:= Doc.createElement("Request"); <span>// রুট এলিমেন্টের ঠিকানা পাচ্ছেন</span>// ডোমেলিমেন্ট তৈরি করুন (ট্যাগ) <span>নোড:= Doc.createElement("চালান");</span>// রুটে একটি উপাদান যোগ করা <span>r.appendChild(Node2);</span><span>// একটি উপাদান যোগ করা</span> <span>নোড 2। appendChild(নোড);</span>এলএলসি "টাইফুন" <span>Node3:= Doc.createElement("Depurture"); <Destination>, <DataSend>, // <DataDepurture>, <Currency> // <DestinationCompany>নোড। appendChild(Node3);</span>// অনুরোধের "Depurture" ক্ষেত্রের অ্যাক্সেস <span>str:= Query.FieldByName("Depurture").AsString;</span>// একটি টেক্সট নোড তৈরি করা = ক্ষেত্র মান <span>// নোডে একটি মান নির্ধারণ করা</span>// টেক্সট নোড, পরিবর্তনশীল str <span>// ট্যাগের জন্য অনুরূপ অপারেশন</span>(ডিবি ক্ষেত্র "প্রাপক") <span>নোড:= Doc.createElement("গন্তব্য");</span> <span>// অ্যাক্সেস অনুরোধ বন্ধ করে</span>প্রশ্ন. বন্ধ করুন; <span>// টেক্সট "অনুরোধ B" দেখুন, তথ্য. পণ্য সম্পর্কে</span> Query.Text:= queryВ; <span>// পরামিতি মান নির্ধারণ</span> Query.Params.AsInteger:= ইনভয়েস নম্বর; <span>স্ট্রিং;</span> Query2.ExecSQL; <span>// ডেটা অনুরোধ করার জন্য খোলার অ্যাক্সেস</span>প্রশ্ন. খুলুন; <span>Query.Text:= queryA;</span> Node3:= Doc.createElement("Imems"); <span>// রুট এলিমেন্টের ঠিকানা পাচ্ছেন</span>নোড। appendChild(Node3); <span>// সমস্ত ক্যোয়ারী লাইনের মাধ্যমে লুপ করুন</span> <b>যখন</b> <b>না</b> Eof.Query <b>করতে</b> begin Node4:= Doc.createElement("Imem"); <span>// রুট এলিমেন্টের ঠিকানা পাচ্ছেন</span> Node3.appendChild(Node4); <span>// ট্যাগের জন্য ডেটা তৈরি করা</span> str:= Query.FieldByName("Price").AsString; <span>txt:= Doc.createTextNode(str); <HZ_Cod>, <Quality>, <GoodName> </span> <b>Memo1.Text:=Doc.xml;</b> <b>Memo1.Text:=Doc.xml;</b> <p>Node.appendChild(txt);</p> <table width="100%"><tbody><tr><td align="middle"><br><img src='https://i1.wp.com/codenet.ru/np-includes/upload/2005/01/05/128661.gif' width="100%" loading=lazy loading=lazy></td> </tr></tbody></table><p>... <b>// ট্যাগের জন্য অনুরূপ অপারেশন</b>:</p> <b>Memo1: TMemo;</b>এই পদ্ধতির ফলস্বরূপ, XML নথির নিম্নলিখিত পাঠ্য তৈরি হয়: <h2>একটি অনুরোধ তৈরি করতে, অবজেক্টের ওপেন পদ্ধতি ব্যবহার করা হয়</h2> <p>IXMLHttp অনুরোধ</p> <p>খুলুন(const bstrMethod, - পদ্ধতির ধরন "POST" bstrUrl, - Url সার্ভার ঠিকানা varAsync, - যোগাযোগ মোড অ্যাসিঙ্ক্রোনাস/সিনক্রোনাস = সত্য bstrUser, - প্রমাণীকরণের জন্য ব্যবহারকারীর নাম bstrPassword) - পাসওয়ার্ড</p> <b>Memo1: TMemo;</b>একটি ডকুমেন্ট প্রসেসিং সার্ভার অংশ তৈরি করা <b>শেষ</b> <span>আগেই উল্লেখ করা হয়েছে, HTTP অনুরোধ প্রক্রিয়াকরণ CGI অ্যাপ্লিকেশন বা জাভা সার্লেট দ্বারা করা যেতে পারে। এএসপি পেজ লেখাও সম্ভব। কিন্তু এই ক্ষেত্রে, শুধুমাত্র একটি ক্যোয়ারী স্ট্রিং এর মাধ্যমে "GET" পদ্ধতি ব্যবহার করে ডেটা স্থানান্তর সম্ভব। যদিও, ASP পৃষ্ঠাগুলির জন্য HTTP অনুরোধ প্রক্রিয়াকরণ একটি CGI অ্যাপ্লিকেশনের চেয়ে বেশি কার্যকর। যাইহোক, আমার মতে, কীভাবে প্রক্রিয়া করা যায় তা কোন পার্থক্য করে না, তবে আরও গুরুত্বপূর্ণ হল প্রশ্নটি সমাধান করা - কীভাবে একটি প্রক্রিয়াকরণ প্রোগ্রাম তৈরি করা যায়, এবং কী উপায়ে নয়।</span>যদি পূর্ববর্তী অধ্যায় থেকে আমরা একটি XML নথি তৈরি করার বিকল্পগুলি দেখে থাকি, তাহলে সার্ভার অ্যাপ্লিকেশনটির কাজটি বিপরীত - XML ​​নথি পার্স করা। নীচে প্রোগ্রামের একটি অংশ যা xml নথি পার্স করে: <span>Tthread1.DataParser(প্রেরক: Tobject);</span>// DMElement অবজেক্টের ঘোষণা <span>r,FNode: IXMLDomelement;</span> Str, ফাইলের নাম: স্ট্রিং; <span>parm: স্ট্রিং;</span> <b>// একটি কোক্লাসের ঘোষণা এবং</b> CoDocXML, CoDocXSL, CoDocResult: CoDomDocument ; <span>প্রশ্ন. বন্ধ করুন;</span>// XMLDomDocument অবজেক্ট <span>XMLDoc, XSLDoc, ResultDoc: DomDocument ;</span>// HttpStr: স্ট্রিং; - HTTP অনুরোধ স্ট্রিং ধারণকারী গ্লোবাল ভেরিয়েবল <span>শুরু করুন</span> XMLDoc:=coDocXML.Create; <span>XMLDoc.LoadXML(HttpStr);</span> r:=Doc.Get_documentElement; <span>// উপাদানের মান পাওয়া</span> FNode:= r.SelectSingleNode("//TypeDocument"); <span>// অ্যাট্রিবিউট মান id="Order" পাওয়া</span>ফলাফল ডক:=coDocResult.Create; <span>// সিঙ্ক্রোনাস প্রসেসিং মোড সেট করা</span> ResultDoc.Set_async(false); <span>// সেট পার্সিং চেক</span> ResultDoc.validateOnParse:= true; <span>// একটি XSL টেমপ্লেট ব্যবহার করে XMLDoc পার্স করুন</span> XMLDoc.transformNodeToObject(XSLDoc, ResultDoc); <span>// ভেরিয়েবল Str একটি পাঠ্য মান বরাদ্দ করা হয়</span> <span>// ফলাফল নথি।</span> Str:= ResultDoc.text; <span>// উপাদান অনুসন্ধান করুন</span> FNode:= r.SelectSingleNode("//InvoiceNumber"); <span>// এবং উপাদানের মান পাওয়া</span> parm:= FNode.text; <span>// অ্যাক্সেস অনুরোধ বন্ধ করে</span>প্রশ্ন. বন্ধ করুন; <span>Query.Text:= Str;</span>// একটি প্যারামিটার মান বরাদ্দ করা <span>স্ট্রিং;</span> Query.Params.AsString:= parm; <b>Memo1.Text:=Doc.xml;</b> <p>Query.ExecSQL;</p> <p>বিশ্লেষণের সম্পূর্ণ হাইলাইট হল একটি XSL টেমপ্লেটের ব্যবহার, যা প্রতিটি ধরনের নথির জন্য পৃথকভাবে তৈরি করা হয়। পার্সিং এর ফলাফল হল একটি SQL ক্যোয়ারী স্ট্রিং। পরবর্তীকালে, জেনারেট করা SQL ক্যোয়ারী স্ট্রিং কার্যকর করা হলে DBMS-এর ডেটাতে প্রয়োজনীয় পরিবর্তন করা হবে।</p><p> <!-- файл Order.xsl --> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <xsl:for-each select="//header">একটি টেমপ্লেটের মাধ্যমে পার্সিং ব্যবহার করার সুবিধা হল যে ডেটা কিছুটা নমনীয়, এবং অ্যালগরিদমের অপারেশন প্রোগ্রাম কোড থেকে সম্পূর্ণ স্বাধীন। নীচে একটি ORDER নথি প্রক্রিয়া করার জন্য ব্যবহৃত XSL টেমপ্লেট পাঠ্য রয়েছে: <xsl:value-of select="from" />", "<xsl:value-of select="to" />", "<xsl:value-of select="TypeDocument/@id" />") </xsl:for-each> <xsl:for-each select="//item">TABREG-এ ঢোকান (থেকে, থেকে, টাইপেডোক, বডি) মান(" <xsl:value-of select="name" />", "<xsl:value-of select="price" />", "<xsl:value-of select="quality" /> ") </xsl:for-each> </xsl:template> </xsl:stylesheet> </p><p>পণ্যের মধ্যে ঢোকান (চালান নম্বর, নাম, মূল্য, গুণমান) VALUES(" :num", "</p> <p>উপরের উদাহরণটি ব্যাখ্যা করার সময়, এটি লক্ষ করা উচিত যে এক জোড়া ট্যাগ ব্যবহার একটি আনুষ্ঠানিক প্রকৃতির, কারণ পার্স করার পরে, ফলস্বরূপ XML নথিতে আনুষ্ঠানিকভাবে অন্তত একটি নোড থাকতে হবে। ResultDoc.text পদ্ধতি পার্সিংয়ের সময় প্রাপ্ত ResultDoc XML নথির পাঠ্য মান নির্ধারণ করে। এই ক্ষেত্রে, মান হল সমস্ত কিছু যা এক জোড়া ট্যাগ দ্বারা ফ্রেম করা হয় এবং, i.e. এসকিউএল কোয়েরি আমরা তৈরি করেছি। <b>একটি প্রোগ্রাম লেখার আরেকটি বৈশিষ্ট্য একটি SQL প্যারামিটার ব্যবহার করার সম্ভাবনা উল্লেখ করা উচিত</b>: সংখ্যা।</p><h2>এই প্যারামিটার ব্যবহার করে আপনি xsl টেমপ্লেটের পাঠ্যকে সরল করতে পারবেন। একটি XML নথির সংশ্লিষ্ট নোড উপাদানগুলির অর্থ নির্ধারণ করা প্রাথমিকভাবে সংশ্লিষ্ট নোডের নাম নির্বাচন করে নির্ধারিত হয়, উদাহরণস্বরূপ:</h2> <p>XSL সম্পর্কে সংক্ষেপে</p> <ul><li>সংক্ষেপণ XSL এসেছে এক্সটেনসিবল স্টাইলশীট ভাষা থেকে - স্টাইল শীট (এক্সএমএল ডেটা) ফর্ম্যাট করার জন্য একটি ভাষা। শিরোনাম অনুসারে, এক্সটেনসিবল স্টাইলশীট ল্যাঙ্গুয়েজ (এক্সএসএল) এক্সএমএল ডেটা ফর্ম্যাট করতে ব্যবহৃত হয়। W3C সংজ্ঞা অনুসারে, XSL দুটি অংশ নিয়ে গঠিত:</li><li>বিন্যাস উপাদান. এই উপাদানগুলি XSL ব্যবহার করে প্রক্রিয়া করার পরে ডেটার টাইপোগ্রাফিক ডিজাইনের সমস্ত উপাদান অন্তর্ভুক্ত করে। শুধুমাত্র HTML পেজ তৈরি করতে ব্যবহৃত হয়।</li> </ul><p>XSLT ব্যবহার করে, আমরা একটি XML ফাইল থেকে আমাদের প্রয়োজনীয় ডেটা নির্বাচন করতে পারি এবং ব্যবহারকারীর কাছে উপস্থাপনের জন্য এটিকে একটি আকারে সাজাতে পারি। উদাহরণ স্বরূপ, আমাদের ক্ষেত্রে, আমরা XML ডেটাকে SQL ক্যোয়ারীতে রূপান্তর করেছি। XSL-এর ক্লাসিক ব্যবহার হল, একটি নিয়ম হিসাবে, এইচটিএমএল পৃষ্ঠাগুলির আকারে ডেটা ফর্ম্যাটিং করা বা খুব কমই, আরটিএফ ফাইলের আকারে।</p> <p>XSL ফাইলটি টেমপ্লেট বর্ণনা করে যা অনুযায়ী XML ডেটা রূপান্তরিত হবে। XSL টেমপ্লেটগুলিতে ফিরে, নিম্নলিখিত উপাদানগুলি (নির্দেশাবলী) XSLT-তে আলাদা করা যেতে পারে:</p> <table cellspacing="0" cellpadding="4" width="500" border="1"><tbody><tr><td valign="top" width="31%"> <b>XSL নির্দেশাবলী</b> </td><th align="middle" width="69%"> <b>বর্ণনা</b> </th> </tr><tr><td>xsl:অ্যাপ্লাই-টেমপ্লেট</td> <td>নির্বাচন="টেমপ্লেট নাম" অ্যাট্রিবিউটে সংশ্লিষ্ট টেমপ্লেটের প্রয়োগ নির্দেশ করে নির্দেশিকা</td> </tr><tr><td>xsl: বৈশিষ্ট্য</td> <td>একটি অ্যাট্রিবিউট ট্রি তৈরি করে এবং এটিকে আউটপুট এলিমেন্টে যোগ করে, প্যারামিটার name="attribute name", namespace - URI নেমস্পেসে (নেমস্পেস প্রিফিক্স)</td> </tr><tr><td>xsl:কল-টেমপ্লেট</td> <td>টেমপ্লেটকে কল করে, অ্যাট্রিবিউট নাম="URI টু টেমপ্লেট"</td> </tr><tr><td>xsl: চয়ন করুন <br>xsl: কখন <br>xsl: অন্যথায়</td> <td>xsl এর উপর ভিত্তি করে একটি নির্বাচন করা:when expr="একটি স্ক্রিপ্টে একটি অভিব্যক্তি মূল্যায়ন করা", <br>ভাষা="ভাষা-নাম" <br>পরীক্ষা = "মূল্যায়িত অভিব্যক্তি"</td> </tr><tr><td>xsl: মন্তব্য</td> <td>আউটপুট নথিতে একটি মন্তব্য তৈরি করে</td> </tr><tr><td>xsl: কপি <br>xsl: কপি-এর</td> <td>বর্তমান নোডটিকে আউটপুট উত্সে অনুলিপি করে বা নোডে একটি নথির খণ্ড পেস্ট করে যেখানে নির্বাচন বৈশিষ্ট্য = "সোর্স নোডের নাম"</td> </tr><tr><td>xsl: উপাদান</td> <td>নাম দ্বারা একটি আউটপুট উপাদান তৈরি করে, অ্যাট্রিবিউটের নাম = "এলিমেন্টের নাম", নেমস্পেস = "উরি নেমস্পেস রেফারেন্স"</td> </tr><tr><td>xsl: প্রত্যেকের জন্য</td> <td>নোড তালিকার সমস্ত নোডগুলিতে টেমপ্লেটটি পুনরায় প্রয়োগ করে, নির্বাচিত বৈশিষ্ট্যটি নোডগুলির তালিকা নির্দিষ্ট করে</td> </tr><tr><td>xsl: if</td> <td>একটি এক্সপ্রেশন হিসাবে পরীক্ষার বৈশিষ্ট্য দ্বারা নির্দিষ্ট শর্ত পরীক্ষা করা হচ্ছে</td> </tr><tr><td>xsl: অন্তর্ভুক্ত</td> <td>এক্সটার্নাল টেমপ্লেট, href = "URI রেফারেন্স" অ্যাট্রিবিউট অন্তর্ভুক্ত করে</td> </tr><tr><td>xsl: আউটপুট</td> <td>আউটপুট ফলাফল নির্দিষ্ট করে, মেথড অ্যাট্রিবিউটে "xml", "html" বা "text" মান থাকতে পারে</td> </tr><tr><td>xsl: param</td> <td>প্যারামিটারের মান নির্দিষ্ট করে, অ্যাট্রিবিউটের নাম = "প্যারামিটার নাম", নির্বাচন = "মান"</td> </tr><tr><td>xsl: প্রক্রিয়াকরণ-নির্দেশ</td> <td>একটি প্রসেসিং নির্দেশনা তৈরি করে, অ্যাট্রিবিউট name="process instruction name"</td> </tr><tr><td>xsl: সাজান</td> <td>একাধিক নোড বাছাই, বৈশিষ্ট্য নির্বাচন = "নোডের নাম", ডেটা-টাইপ = ডেটা টাইপ ("টেক্সট" | "সংখ্যা" | Qname), ক্রম = সাজানোর দিক ("অ্যাসেন্ডিং" | "ডিসেন্ডিং")</td> </tr><tr><td>xsl:স্টাইলশীট</td> <td>একটি xsl টেমপ্লেট নথি সংজ্ঞায়িত করে, XSLT এর জন্য মূল উপাদান</td> </tr><tr><td>xsl:টেমপ্লেট</td> <td>একটি xsl টেমপ্লেট সংজ্ঞায়িত করে, অ্যাট্রিবিউটের নাম= "টেমপ্লেট নামের ইউআরআই উপসর্গ", match= "নোডের ইঙ্গিত যেখানে টেমপ্লেটটি প্রয়োগ করা হয়েছে"</td> </tr><tr><td>xsl:টেক্সট</td> <td>আউটপুট স্ট্রীমে পাঠ্য তৈরি করে, নিষ্ক্রিয়-আউটপুট-এসকেপিং অ্যাট্রিবিউট = "হ্যাঁ" বা "না", ESC অক্ষর তৈরি করার ক্ষমতা নির্দেশ করে</td> </tr><tr><td>xsl:-এর মান</td> <td>টেক্সট হিসাবে নির্বাচিত নোডের মান সন্নিবেশ করান, নির্বাচন করুন বৈশিষ্ট্য = "নোডে পয়েন্টার" যেখান থেকে মান নেওয়া হয়</td> </tr><tr><td>xsl: পরিবর্তনশীল</td> <td>পরিবর্তনশীল সীমার মান নির্দিষ্ট করে, বৈশিষ্ট্যের নাম = "ভেরিয়েবলের নাম", নির্বাচন করুন = "ভেরিয়েবল মানের গণনা"</td> </tr><tr><td>xsl: উইথ-পরাম</td> <td>একটি টেমপ্লেটে একটি প্যারামিটার প্রয়োগ করে, name attribute = "প্যারামিটারের নাম", নির্বাচন করুন = এক্সপ্রেশন বর্তমান প্রসঙ্গ মূল্যায়ন করতে, ডিফল্ট মান "।"</td> </tr></tbody></table><h2>উপসংহার</h2> <p>পরিশেষে, এটি একটি মান XML পার্সার ব্যবহার করে উল্লেখ করা উচিত <i>msxml.dll</i>এক্সএমএল নথি পার্সিং এবং তৈরি করার একমাত্র হাতিয়ার নয়। উদাহরণস্বরূপ, XML নথি তৈরি করতে উপাদানগুলি ব্যবহার করা কার্যকর <b>TPage প্রযোজক</b>এবং <b>TTable প্রযোজক</b>. কিন্তু, এই নিবন্ধটি শুধুমাত্র অনুশীলনে DOM মডেল ব্যবহার করার প্রশস্ততা এবং সম্ভাবনার উপর জোর দেয়।</p> <p>লেখক বিষয়ের প্রাসঙ্গিকতা, সাধারণ বিষয়বস্তু, উপস্থাপনের শৈলী, সেইসাথে অন্যান্য সমস্ত মন্তব্যের জন্য প্রতিক্রিয়ার জন্য অত্যন্ত কৃতজ্ঞ হবেন যা নিবন্ধগুলির একটি সংগ্রহ লেখার মান এবং বিষয়টিকে কভার করে একটি বই প্রকাশের মানকে আরও উন্নত করতে সহায়তা করবে। ই-কমার্সে XML নথি ব্যবহারের ব্যবহারিক দিক। বৈদ্যুতিন নথি ব্যবহারের ব্যবহারিক দিক সম্পর্কে আরও বিশদ তথ্য লেখকের ওয়েবসাইট www.eDocs.al.ru-এ পাওয়া যাবে এটি লেখকের ওয়েবসাইটে উত্স পাঠ্য এবং উদাহরণগুলি পোস্ট করারও পরিকল্পনা করা হয়েছে।</p> <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast_after?t44.1;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,150))+ ";"+Math.random()+ "border='0' width='1' height='1' loading=lazy loading=lazy>");</script> <div class="evc-social-likes" data-url="https://ymol.ru/how-to-work/ispolzovanie-xml-v-srede-delphi-ispolzovanie-xml-document-object-model/" data-title="ডেলফি পরিবেশে XML ব্যবহার করা। XML ডকুমেন্ট অবজেক্ট মডেল ব্যবহার করে" data-media="https://i1.wp.com/zoo-mania.ru/wp-content/uploads/2011/08/settings.ini_.jpg"> <div class="social-likes "> <div class="facebook" title="ফেসবুকে লিঙ্ক শেয়ার করুন">ফেসবুক</div> <div class="twitter" title="টুইটারে লিঙ্ক শেয়ার করুন">টুইটার</div> <div class="vkontakte" title="VKontakte-এ লিঙ্ক শেয়ার করুন">VKontakte</div> <div class="plusone" title="গুগল প্লাসে লিঙ্ক শেয়ার করুন">Google+</div> </div> </div> <span class="thecategory"><i class="icon-globe"></i> <a href="https://ymol.ru/bn/category/how-to-work/" rel="category tag">কিভাবে কাজ করতে হয়</a></span> </div> </article> <div class="post-tags"></div> <div class="related-posts"> <h4>আপনি পছন্দ করতে পারেন</h4> <article id="post-36374" class="latestpost post-36374 post type-post status-publish format-standard hentry category-poleznye-sovety"> <a href="https://ymol.ru/bn/operation/kak-abonentam-mts-uznat-svoi-nomer-telefona-mobilnyi/" title="এমটিএস থেকে মোবাইল ইন্টারনেট" id="featured-thumbnail"> <div class="featured-thumbnail"> <img src="/uploads/0637926dfa0061433afd588fbf5583cc.jpg" alt="এমটিএস থেকে মোবাইল ইন্টারনেট" / loading=lazy loading=lazy> </div> </a> <header class="entry-header"> <h1 class="entry-title"><a href="https://ymol.ru/bn/operation/kak-abonentam-mts-uznat-svoi-nomer-telefona-mobilnyi/" rel="bookmark">এমটিএস থেকে মোবাইল ইন্টারনেট</a></h1> </header> </article> <article id="post-36373" class="latestpost post-36373 post type-post status-publish format-standard hentry category-poleznye-sovety"> <a href="https://ymol.ru/bn/reviews/programma-chtoby-zapisyvat-cd-desyatka-besplatnyh-programm-dlya-zapisi/" title="অপটিক্যাল ডিস্ক বার্ন করার জন্য দশটি বিনামূল্যের প্রোগ্রাম" id="featured-thumbnail"> <div class="featured-thumbnail"> <img src="/uploads/db92ce5b818edead87740507e0c79c7b.jpg" alt="অপটিক্যাল ডিস্ক বার্ন করার জন্য দশটি বিনামূল্যের প্রোগ্রাম" / loading=lazy loading=lazy> </div> </a> <header class="entry-header"> <h1 class="entry-title"><a href="https://ymol.ru/bn/reviews/programma-chtoby-zapisyvat-cd-desyatka-besplatnyh-programm-dlya-zapisi/" rel="bookmark">অপটিক্যাল ডিস্ক বার্ন করার জন্য দশটি বিনামূল্যের প্রোগ্রাম</a></h1> </header> </article> <article id="post-36372" class="latestpost post-36372 post type-post status-publish format-standard hentry category-poleznye-sovety"> <a href="https://ymol.ru/bn/wi-fi/prosmotr-dvd-diska-na-noutbuke-i-kompyutere-windows-ne-vidit-cd-ili-dvd-diskovod-chto/" title="উইন্ডোজ সিডি বা ডিভিডি ড্রাইভ দেখতে পায় না" id="featured-thumbnail"> <div class="featured-thumbnail"> <img src="/uploads/e8ac8b5dfe614f4e051c12722bca05c1.jpg" alt="উইন্ডোজ সিডি বা ডিভিডি ড্রাইভ দেখতে পায় না" / loading=lazy loading=lazy> </div> </a> <header class="entry-header"> <h1 class="entry-title"><a href="https://ymol.ru/bn/wi-fi/prosmotr-dvd-diska-na-noutbuke-i-kompyutere-windows-ne-vidit-cd-ili-dvd-diskovod-chto/" rel="bookmark">উইন্ডোজ সিডি বা ডিভিডি ড্রাইভ দেখতে পায় না</a></h1> </header> </article> </div> </main> <div id="sidebar" class="sidebar c-4-12" role="complementary" itemscope itemtype="http://schema.org/WPSideBar"> <aside id="recent-posts-3" class="widget widget_recent_entries"> <h3 class="widget-title">সর্বাধিক জনপ্রিয়</h3> <ul> <li class='li1'><a href='https://ymol.ru/bn/instructions/red-energy-super-mts-i-posekundnyi-mts-obnovili-svoe-yaico-socialnaya/' title='MTS তাদের আপডেট করেছে৷"яйцо" Социальная активность оператора'>MTS তার "ডিম" অপারেটরের সামাজিক কার্যকলাপ আপডেট করেছে</a></li> <li class='li1'><a href='https://ymol.ru/bn/reviews/vychislyaemoe-pole-v-skd-1s-8-3-yazyk-vyrazhenii-sistemy-komponovki/' title='SKD 1s 8 এ গণনা করা ক্ষেত্র'>SKD 1s 8 এ গণনা করা ক্ষেত্র</a></li> <li class='li1'><a href='https://ymol.ru/bn/how-to-work/elektronnaya-pochta-kak-sredstvo-obespecheniya-delovyh-kommunikacii/' title='ইলেকট্রনিক ব্যবসায়িক যোগাযোগ যোগাযোগের সরঞ্জামগুলি অত্যন্ত গুরুত্বপূর্ণ'>ইলেকট্রনিক ব্যবসায়িক যোগাযোগ যোগাযোগের সরঞ্জামগুলি অত্যন্ত গুরুত্বপূর্ণ</a></li> <li class='li1'><a href='https://ymol.ru/bn/operation/uvelichivaem-gromkost-mp3-faila-obrabotka-zapisei-s-diktofona-s-pomoshchyu/' title='অ্যাডোব অডিশন ব্যবহার করে একটি ভয়েস রেকর্ডার থেকে রেকর্ডিং প্রক্রিয়াকরণ একটি ভয়েস রেকর্ডার থেকে অডিও রেকর্ডিং উন্নত করার জন্য একটি প্রোগ্রাম'>অ্যাডোব অডিশন ব্যবহার করে একটি ভয়েস রেকর্ডার থেকে রেকর্ডিং প্রক্রিয়াকরণ একটি ভয়েস রেকর্ডার থেকে অডিও রেকর্ডিং উন্নত করার জন্য একটি প্রোগ্রাম</a></li> <li class='li1'><a href='https://ymol.ru/bn/reviews/moskovskii-gosudarstvennyi-universitet-pechati-federalnoe-agentstvo-po/' title='ফেডারেল এজেন্সি ফর এডুকেশন ইনফরমেশন হিউরিস্টিকস'>ফেডারেল এজেন্সি ফর এডুকেশন ইনফরমেশন হিউরিস্টিকস</a></li> <li class='li1'><a href='https://ymol.ru/bn/operation/ne-gruzitsya-windows-10-v-ahci-vklyuchaem-ahci-rezhim-v-bios-kak-proverit-vklyuchen-li/' title='BIOS-এ AHCI মোড সক্রিয় করুন'>BIOS-এ AHCI মোড সক্রিয় করুন</a></li> <li class='li1'><a href='https://ymol.ru/bn/beginning/chto-takoe-klasterizaciya-semanticheskogo-yadra-i-kak-delat-gruppirovku/' title='শব্দার্থক কোর এবং সার্চ ইঞ্জিন কোয়েরির ক্লাস্টারিং শব্দার্থক কোরে কোয়েরির গ্রুপিং'>শব্দার্থক কোর এবং সার্চ ইঞ্জিন কোয়েরির ক্লাস্টারিং শব্দার্থক কোরে কোয়েরির গ্রুপিং</a></li> <li class='li1'><a href='https://ymol.ru/bn/setting/kak-v-skaipe-pokazat-svoi-ekran-sobesedniku-kakie-vozmozhnosti-dostupny-v/' title='স্কাইপ কলে কি কি বৈশিষ্ট্য পাওয়া যায়?'>স্কাইপ কলে কি কি বৈশিষ্ট্য পাওয়া যায়?</a></li> <li class='li1'><a href='https://ymol.ru/bn/choice/ne-zapuskaetsya-autocad-parallelnaya-konfiguraciya-nepravilna-kak/' title='ত্রুটিটি কীভাবে ঠিক করবেন "অ্যাপ্লিকেশনটি শুরু করা যায়নি কারণ এর সমান্তরাল কনফিগারেশনটি ভুল"'>ত্রুটিটি কীভাবে ঠিক করবেন "অ্যাপ্লিকেশনটি শুরু করা যায়নি কারণ এর সমান্তরাল কনফিগারেশনটি ভুল"</a></li> <li class='li1'><a href='https://ymol.ru/bn/beginning/telekarta-odno-oborudovanie-na-neskolko-televizorov-kak-podklyuchit-dva/' title='একটি স্যাটেলাইট ডিশে দুটি টিভি কীভাবে সংযুক্ত করবেন'>একটি স্যাটেলাইট ডিশে দুটি টিভি কীভাবে সংযুক্ত করবেন</a></li> </ul> </aside> <aside id="wpforo_widget_recent_topics-2" class="widget widget_wpforo_widget_recent_topics"><div id="wpf-widget-recent-replies" class="wpforo-widget-wrap"><h3 class="widget-title">নতুন বার্তা</h3><div class="wpforo-widget-content"><ul> <li> <div class="wpforo-list-item"> <div class="wpforo-list-item-left"> <img class="avatar" src="/uploads/e71372f2d81f494ed54bb8cf89310863.jpg" height="96" width="96" / loading=lazy loading=lazy> </div> <div class="wpforo-list-item-right"> <p class="posttitle"><a href="https://ymol.ru/bn/wi-fi/bp-programmy-programmy-dlya-noutbuka-prostaya-programma-dlya-skachivaniya-igr/">বিপি প্রোগ্রাম। ল্যাপটপ প্রোগ্রাম। আপনার কম্পিউটারে গেম ডাউনলোড করার জন্য একটি সহজ প্রোগ্রাম</a></p> <p class="postuser">2024-05-15 03:08:19</p> </div> <div class="wpf-clear"></div> </div> </li> <li> <div class="wpforo-list-item"> <div class="wpforo-list-item-left"> <img class="avatar" src="/uploads/3e26b340d0a794722aac41bf4af0cd69.jpg" height="96" width="96" / loading=lazy loading=lazy> </div> <div class="wpforo-list-item-right"> <p class="posttitle"><a href="https://ymol.ru/bn/instructions/telefon-htc-opisanie-i-harakteristiki-htc-one-m7---tehnicheskie-harakteristiki/">HTC One M7 - স্পেসিফিকেশন</a></p> <p class="postuser">2024-05-08 03:08:34</p> </div> <div class="wpf-clear"></div> </div> </li> <li> <div class="wpforo-list-item"> <div class="wpforo-list-item-left"> <img class="avatar" src="/uploads/8e3803b8a9cee6638730e12090da84b9.jpg" height="96" width="96" / loading=lazy loading=lazy> </div> <div class="wpforo-list-item-right"> <p class="posttitle"><a href="https://ymol.ru/bn/choice/regulyarnye-vyrazheniya-poisk-ne-vklyuchaya-stroku-javascript-regulyarnoe/">জাভাস্ক্রিপ্ট, রেগুলার এক্সপ্রেশন: উদাহরণ, রেগুলার এক্সপ্রেশন চেক করা</a></p> <p class="postuser">2024-05-05 03:13:30</p> </div> <div class="wpf-clear"></div> </div> </li> <li> <div class="wpforo-list-item"> <div class="wpforo-list-item-left"> <img class="avatar" src="/uploads/568b281d61696cb02e39bd7680ae9b3e.jpg" height="96" width="96" / loading=lazy loading=lazy> </div> <div class="wpforo-list-item-right"> <p class="posttitle"><a href="https://ymol.ru/bn/overview/m1-b-3-kompyuternye-tehnologii-v-nauke-i-proizvodstve-kompyuternye/">M1.B.3 বিজ্ঞান এবং উৎপাদনে কম্পিউটার প্রযুক্তি। বিজ্ঞান ও শিক্ষায় কম্পিউটার প্রযুক্তি বিজ্ঞান ও উৎপাদনে কম্পিউটার প্রযুক্তি</a></p> <p class="postuser">2024-05-04 03:24:12</p> </div> <div class="wpf-clear"></div> </div> </li> <li> <div class="wpforo-list-item"> <div class="wpforo-list-item-left"> <img class="avatar" src="/uploads/49f66e5b2f9388fa11971c779148e0b9.jpg" height="96" width="96" / loading=lazy loading=lazy> </div> <div class="wpforo-list-item-right"> <p class="posttitle"><a href="https://ymol.ru/bn/instructions/progress-dispetchera-zagruzok-ne-otobrazhaetsya-v-oblasti/">কেন ফাইলগুলি ফ্ল্যাশ ড্রাইভে দৃশ্যমান হয় না এবং কীভাবে এটি ঠিক করা যায় কেন ডাউনলোড করা ফাইলগুলি ডাউনলোডগুলিতে প্রদর্শিত হয় না</a></p> <p class="postuser">2024-05-02 03:11:13</p> </div> <div class="wpf-clear"></div> </div> </li> </ul></div></div></aside><aside id="categories-2" class="widget widget_categories"><h3 class="widget-title">ক্যাটাগরি</h3> <ul> <li class="cat-item cat-item-84"><a href="https://ymol.ru/bn/category/bluetooth/">ব্লুটুথ</a> </li> <li class="cat-item cat-item-84"><a href="https://ymol.ru/bn/category/wi-fi/">ওয়াইফাই</a> </li> <li class="cat-item cat-item-84"><a href="https://ymol.ru/bn/category/choice/">পছন্দ </a> </li> <li class="cat-item cat-item-84"><a href="https://ymol.ru/bn/category/instructions/">নির্দেশনা</a> </li> <li class="cat-item cat-item-84"><a href="https://ymol.ru/bn/category/how-to-work/">কিভাবে কাজ করতে হয়</a> </li> <li class="cat-item cat-item-84"><a href="https://ymol.ru/bn/category/setting/">সেটিংস </a> </li> <li class="cat-item cat-item-84"><a href="https://ymol.ru/bn/category/beginning/">শুরু করুন</a> </li> <li class="cat-item cat-item-84"><a href="https://ymol.ru/bn/category/overview/">পর্যালোচনা</a> </li> <li class="cat-item cat-item-84"><a href="https://ymol.ru/bn/category/overview/">পর্যালোচনা </a> </li> <li class="cat-item cat-item-84"><a href="https://ymol.ru/bn/category/reviews/">রিভিউ</a> </li> </ul> </aside><aside id="dwqa-latest-question-2" class="widget widget_categories"><h3 class="widget-title">নতুন নিবন্ধ</h3><ul> <li class="cat-item"><a href="https://ymol.ru/bn/setting/nl-interneshnl-lichnyi-kabinet-vhod-nl-international-otzyvy-interesuyut/">এনএল ইন্টারন্যাশনাল - আপনি কি রিভিউতে আগ্রহী?</a></li> <li class="cat-item"><a href="https://ymol.ru/bn/setting/svetyashchiesya-linii-dlya-fotoshopa-kak-sozdat-svetyashchiesya-linii-v/">ফটোশপে কীভাবে উজ্জ্বল লাইন তৈরি করবেন - দ্রুত এবং সুন্দরভাবে</a></li> <li class="cat-item"><a href="https://ymol.ru/bn/operation/kak-abonentam-mts-uznat-svoi-nomer-telefona-mobilnyi/">এমটিএস থেকে মোবাইল ইন্টারনেট</a></li> <li class="cat-item"><a href="https://ymol.ru/bn/reviews/programma-chtoby-zapisyvat-cd-desyatka-besplatnyh-programm-dlya-zapisi/">অপটিক্যাল ডিস্ক বার্ন করার জন্য দশটি বিনামূল্যের প্রোগ্রাম</a></li> <li class="cat-item"><a href="https://ymol.ru/bn/wi-fi/prosmotr-dvd-diska-na-noutbuke-i-kompyutere-windows-ne-vidit-cd-ili-dvd-diskovod-chto/">উইন্ডোজ সিডি বা ডিভিডি ড্রাইভ দেখতে পায় না</a></li> <li class="cat-item"><a href="https://ymol.ru/bn/instructions/red-energy-super-mts-i-posekundnyi-mts-obnovili-svoe-yaico-socialnaya/">MTS তার "ডিম" অপারেটরের সামাজিক কার্যকলাপ আপডেট করেছে</a></li> <li class="cat-item"><a href="https://ymol.ru/bn/reviews/vychislyaemoe-pole-v-skd-1s-8-3-yazyk-vyrazhenii-sistemy-komponovki/">SKD 1s 8 এ গণনা করা ক্ষেত্র</a></li> <li class="cat-item"><a href="https://ymol.ru/bn/how-to-work/elektronnaya-pochta-kak-sredstvo-obespecheniya-delovyh-kommunikacii/">ইলেকট্রনিক ব্যবসায়িক যোগাযোগ যোগাযোগের সরঞ্জামগুলি অত্যন্ত গুরুত্বপূর্ণ</a></li> <li class="cat-item"><a href="https://ymol.ru/bn/operation/uvelichivaem-gromkost-mp3-faila-obrabotka-zapisei-s-diktofona-s-pomoshchyu/">অ্যাডোব অডিশন ব্যবহার করে একটি ভয়েস রেকর্ডার থেকে রেকর্ডিং প্রক্রিয়াকরণ একটি ভয়েস রেকর্ডার থেকে অডিও রেকর্ডিং উন্নত করার জন্য একটি প্রোগ্রাম</a></li> <li class="cat-item"><a href="https://ymol.ru/bn/reviews/moskovskii-gosudarstvennyi-universitet-pechati-federalnoe-agentstvo-po/">ফেডারেল এজেন্সি ফর এডুকেশন ইনফরমেশন হিউরিস্টিকস</a></li> </ul></aside></div> </div> </div> </div> <footer id="colophon" class="site-footer" role="contentinfo"> <div class="site-info container"> <div class="copyrights"> <span class="sep"> </span> ymol.ru - ট্যাবলেট সম্পর্কে সব - তথ্য পোর্টাল</div> <a href="#blog" class="toplink" ><i class="icon-angle-up"></i></a> <nav id="navigation" class="footer-navigation" role="navigation"> <div class="menu-footer-menu-container"><ul id="menu-footer-menu" class="menu"> <li class="menu-item type-post_type object-page "><a href="https://ymol.ru/bn/sitemap.xml">সাইট ম্যাপ</a></li> <li class="menu-item type-post_type object-page "><a href="https://ymol.ru/bn/feedback/">পরিচিতি</a></li> </ul></div> </nav> </div> </footer> </div> <div id="vk_api_transport"></div> <script type="text/javascript"> jQuery(document).ready(function ($) { if ($('.social-likes')) { $('.social-likes').each(function () { var p = $(this).parent(); if (p.data('url')) { $(this).data({ 'url': p.data('url'), 'title': p.data('title') } ); } if ($(this).find('.pinterest').length) { if (p.data('media')) { $($(this).find('.pinterest')[0]).data({ 'media': p.data('media') } ); } else $($(this).find('.pinterest')[0]).remove(); } } ); $('.social-likes').socialLikes({ zeroes: 0 } ); } } ); </script> <script type='text/javascript' src='https://ymol.ru/wp-content/plugins/akismet/_inc/form.js?ver=3.2'></script> <script type='text/javascript' src='https://ymol.ru/wp-content/plugins/easy-vkontakte-connect/js/evc-share.js'></script> <script type='text/javascript' src='https://ymol.ru/wp-content/plugins/easy-vkontakte-connect/js/social-likes.min.js?ver=3.0.4'></script> <script type='text/javascript' src='https://ymol.ru/wp-content/plugins/contact-form-7/includes/js/jquery.form.min.js?ver=3.51.0-2014.06.20'></script> <script type='text/javascript' src='https://ymol.ru/wp-content/plugins/contact-form-7/includes/js/scripts.js?ver=4.5.1'></script> <script type='text/javascript' src='https://ymol.ru/wp-content/plugins/wp-review/assets/js/main.js?ver=4.0.6'></script> <script type='text/javascript' src='https://ymol.ru/wp-content/themes/sociallyviral/js/customscripts.js?ver=20120212'></script> <script type='text/javascript' src='/wp-includes/js/comment-reply.min.js?ver=4.6.9'></script> <script type='text/javascript' src='/wp-includes/js/wp-embed.min.js?ver=4.6.9'></script> <script>setTimeout( function(){ jQuery.post('/wp-content/plugins/kama-postviews/ajax-request.php',{ meta_id:'1438', view_type:'post_view', relpath:'' } ,function(result){ jQuery('.ajax_views').html(result); } );} , 2000);</script> <script>function lc_get_cookie(name) { var c = document.cookie;if (c.indexOf(name) != -1) { var x = c.indexOf(name)+name.length+1;var y = c.indexOf(";",x);if (y < 0) y = c.length;return decodeURIComponent(c.substring(x,y));} else return "";} if ((d = document.getElementById("commentform")) != null) { e = d.elements;var z = lc_get_cookie("comment_author_email_27b5a291828a105bf783f92a6d070718");if (z != "") e["email"].value = z;z = lc_get_cookie("comment_author_27b5a291828a105bf783f92a6d070718");if (z != "") e["author"].value = z.replace(/\+/g, " ");z = lc_get_cookie("comment_author_url_27b5a291828a105bf783f92a6d070718");if (z != "") e["url"].value = z;} </script></body></html>