আমি এখন শিখছি XmlDocumentতবে আমি কেবল দৌড়ে XDocumentএসেছি এবং যখন আমি তাদের মধ্যে পার্থক্য বা সুবিধাগুলি সন্ধান করার চেষ্টা করি তখন আমি দরকারী কিছু খুঁজে পাচ্ছি না, আপনি দয়া করে আমাকে বলবেন যে আপনি কেন একে অপরকে ব্যবহার করবেন?
আমি এখন শিখছি XmlDocumentতবে আমি কেবল দৌড়ে XDocumentএসেছি এবং যখন আমি তাদের মধ্যে পার্থক্য বা সুবিধাগুলি সন্ধান করার চেষ্টা করি তখন আমি দরকারী কিছু খুঁজে পাচ্ছি না, আপনি দয়া করে আমাকে বলবেন যে আপনি কেন একে অপরকে ব্যবহার করবেন?
উত্তর:
আপনি .NET সংস্করণ 3.0 ব্যবহার করে কম বা করছেন, তাহলে আপনি আছে ব্যবহার করতে XmlDocumentaka ক্লাসিক করে DOM API- টি। তেমনিভাবে আপনি খুঁজে পাবেন এমন আরও কিছু এপিআই রয়েছে যা এটি আশা করবে।
আপনি যদি পছন্দটি পান তবে আমি XDocumentএক্সএমএল থেকে ওরফে লিনকিউ ব্যবহার করার জন্য পুরোপুরি পরামর্শ দেব । এটা অনেক কাগজপত্র তৈরি এবং সেগুলিকে প্রক্রিয়া করার জন্য সহজ। উদাহরণস্বরূপ, এটির মধ্যে পার্থক্য:
XmlDocument doc = new XmlDocument();
XmlElement root = doc.CreateElement("root");
root.SetAttribute("name", "value");
XmlElement child = doc.CreateElement("child");
child.InnerText = "text node";
root.AppendChild(child);
doc.AppendChild(root);
এবং
XDocument doc = new XDocument(
new XElement("root",
new XAttribute("name", "value"),
new XElement("child", "text node")));
লিনিকউ থেকে এক্সএমএল এর সাথে নেমস্পেসগুলি কাজ করা বেশ সহজ, আমি দেখেছি এমন কোনও এক্সএমএল এপিআই এর বিপরীতে:
XNamespace ns = "http://somewhere.com";
XElement element = new XElement(ns + "elementName");
// etc
লিনকু থেকে এক্সএমএল লিনকিউ-র সাথেও সত্যিই ভাল কাজ করে - এর নির্মাণ মডেল আপনাকে উপ-উপাদানগুলির ক্রমগুলি সহ সহজেই সহজে উপাদান তৈরি করতে দেয়:
// Customers is a List<Customer>
XElement customersElement = new XElement("customers",
customers.Select(c => new XElement("customer",
new XAttribute("name", c.Name),
new XAttribute("lastSeen", c.LastOrder)
new XElement("address",
new XAttribute("town", c.Town),
new XAttribute("firstline", c.Address1),
// etc
));
এগুলি সমস্ত আরও অনেক ঘোষিত, যা সাধারণ লিনকিউ স্টাইলের সাথে খাপ খায়।
এখন যেমন ব্র্যানন উল্লেখ করেছেন, এগুলি স্ট্রিমিংয়ের চেয়ে মেমরি এপিআই (যদিও XStreamingElementঅলস আউটপুট সমর্থন করে)। XmlReaderএবং XmlWriter.NET এ এক্সএমএল স্ট্রিমিংয়ের সাধারণ উপায়, তবে আপনি সমস্ত API গুলি কিছুটা পরিমাণে মেশাতে পারেন। উদাহরণস্বরূপ, আপনি একটি বড় দলিল স্ট্রিম করতে পারেন তবে XmlReaderকোনও এলিমেন্টের শুরুতে একটি অবস্থানে রেখে এটি থেকে একটি এলএনকিউ ব্যবহার করে লিনকুই ব্যবহার করতে পারেন , XElementএটি থেকে একটি পড়া এবং এটি প্রক্রিয়াজাতকরণ, তারপরে পরবর্তী উপাদানটিতে এগিয়ে যাওয়া ইত্যাদি this এই কৌশলটি সম্পর্কে বিভিন্ন ব্লগ পোস্ট রয়েছে, একটি দ্রুত অনুসন্ধানে আমি এখানে এটি পেয়েছি ।
আমি উত্তর বিস্মিত কেউ এতদূর যে উল্লেখ am XmlDocumentকোন লাইন তথ্য প্রদান করে , যখন XDocumentনা (মাধ্যমে IXmlLineInfoইন্টারফেস)।
এটি কিছু ক্ষেত্রে একটি সমালোচনামূলক বৈশিষ্ট্য হতে পারে (উদাহরণস্বরূপ যদি আপনি কোনও এক্সএমএলে ত্রুটিগুলি প্রতিবেদন করতে চান বা উপাদানগুলিকে সাধারণভাবে সংজ্ঞায়িত করা হয় তা ট্র্যাক করতে চান) এবং আপনি সুখে ব্যবহার করে প্রয়োগ করতে শুরু করার আগে আরও ভালভাবে অবগত হন XmlDocument, পরে আপনি এটি সব পরিবর্তন করতে হবে আবিষ্কার।
XDocumentলাইনের তথ্য সরবরাহ করে। দেখুন XDocument.Load সঙ্গে LoadOptions.SetLineInfoএকটি দ্বিতীয় আর্গুমেন্ট হিসাবে। XmlDocumentআমি জানতে আগ্রহী আমি সাথে লাইন তথ্য পেতে একটি উপায় জানেন ; ফিরে যখন আমি এই উত্তরটি লিখেছিলাম আমি কোনও খুঁজে পেলাম না। এই অন্যান্য উত্তর নিশ্চিত বলে মনে হয় stackoverflow.com/a/33622102/253883
XmlDocumentএক্সএমএল ডোম অবজেক্ট মডেলের সাথে পরিচিত বিকাশকারীদের জন্য দুর্দান্ত। এটি প্রায় সময় হয়ে গেছে, এবং আরও বা কম ডাব্লু 3 সি স্ট্যান্ডার্ডের সাথে মিল রাখে। এটি ম্যানুয়াল নেভিগেশন পাশাপাশি XPathনোড নির্বাচন সমর্থন করে ।
XDocument.NET 3.5 তে লিনিকউ থেকে এক্সএমএল বৈশিষ্ট্যটিকে ক্ষমতা দেয়। এটি ভারী ব্যবহার করে IEnumerable<>এবং সরাসরি সি # তে কাজ করা সহজ হতে পারে।
উভয় দস্তাবেজ মডেলেরই আপনাকে পুরো দস্তাবেজটিকে মেমরিতে লোড করা প্রয়োজন ( XmlReaderউদাহরণস্বরূপ পৃথক নয়)।
XDocumentলিনকিউ থেকে এক্সএমএল এপিআই, এবং XmlDocumentএটি এক্সএমএল এর জন্য স্ট্যান্ডার্ড ডোম-স্টাইলের এপিআই। আপনি যদি ডমকে ভাল জানেন, এবং এক্সএমএল থেকে লিনকুই শিখতে না চান, তবে যান XmlDocument। আপনি যদি দুজনের কাছেই নতুন হন তবে এই পৃষ্ঠাটি দুটিটির সাথে তুলনা করে দেখুন এবং কোনটি আপনার চেয়ে ভাল লাগে তা বেছে নিন।
আমি মাত্র লিনকিউ থেকে এক্সএমএল ব্যবহার শুরু করেছি এবং কার্যকরী নির্মাণ ব্যবহার করে আপনি যেভাবে এক্সএমএল ডকুমেন্ট তৈরি করেছেন তা আমি পছন্দ করি। এটা সত্যিই সুন্দর. তুলনায় ডিওএম আঠালো।
অন্যত্র উল্লিখিত হিসাবে, নিঃসন্দেহে, লিনক থেকে এক্সএমএল এক্সএমএল নথি তৈরি এবং পরিবর্তনের সাথে তুলনা করে একটি হাওয়া তৈরি করে XmlDocument, এবং XNamespace ns + "elementName"সিন্টেক্সটি নেমস্পেসের সাথে কাজ করার সময় আনন্দদায়ক পাঠের ব্যবস্থা করে।
লক্ষণীয় xslএবং xpathমরতে কষ্টের জন্য উল্লেখযোগ্য একটি বিষয় হ'ল xpath 1.0লিনক 2 এক্সএমএলে স্বতঃস্ফূর্তভাবে এক্সপ্রেশন চালানো সম্ভব XNodes:
using System.Xml.XPath;
এবং তারপরে আমরা xpathএই এক্সটেনশন পদ্ধতিগুলির মাধ্যমে ডেটা নেভিগেট এবং প্রজেক্ট করতে পারি :
উদাহরণস্বরূপ, এক্সএমএল নথি দেওয়া:
<xml>
<foo>
<baz id="1">10</baz>
<bar id="2" special="1">baa baa</bar>
<baz id="3">20</baz>
<bar id="4" />
<bar id="5" />
</foo>
<foo id="123">Text 1<moo />Text 2
</foo>
</xml>
আমরা মূল্যায়ন করতে পারি:
var node = xele.XPathSelectElement("/xml/foo[@id='123']");
var nodes = xele.XPathSelectElements(
"//moo/ancestor::xml/descendant::baz[@id='1']/following-sibling::bar[not(@special='1')]");
var sum = xele.XPathEvaluate("sum(//foo[not(moo)]/baz)");
আমি বিশ্বাস করি এটি XDocumentঅনেক বেশি অবজেক্ট তৈরির কল করে। আমার সন্দেহ হয় যে আপনি যখন প্রচুর এক্সএমএল ডকুমেন্ট পরিচালনা করছেন তখন XMLDocumentদ্রুত হবে।
স্ক্যানের ডেটা পরিচালনা করার ক্ষেত্রে এটি ঘটে এমন এক জায়গা। অনেক স্ক্যান সরঞ্জাম এক্সএমএলে তাদের ডেটা আউটপুট দেয় (স্পষ্ট কারণে)। আপনাকে যদি এই স্ক্যান ফাইলগুলির অনেকগুলি প্রক্রিয়া করতে হয় তবে আমি মনে করি আপনার সাথে আরও ভাল পারফরম্যান্স থাকবে XMLDocument।