এক্সডোকামেন্ট বা এক্সএমএল ডকুমেন্ট


501

আমি এখন শিখছি XmlDocumentতবে আমি কেবল দৌড়ে XDocumentএসেছি এবং যখন আমি তাদের মধ্যে পার্থক্য বা সুবিধাগুলি সন্ধান করার চেষ্টা করি তখন আমি দরকারী কিছু খুঁজে পাচ্ছি না, আপনি দয়া করে আমাকে বলবেন যে আপনি কেন একে অপরকে ব্যবহার করবেন?


13
আমি ভাবছি যে মাইক্রোসফ্টের ডকুমেন্টেশন ছেলেরা তাদের পার্থক্যগুলি স্পষ্ট করতে বা কখন কী ব্যবহার করবেন সে সম্পর্কে কোনও নোট বা মন্তব্য এমএসডিএন-তে রাখেনি।
কামরান বিগডেলি

1
MSDN কিছু তথ্য: msdn.microsoft.com/en-us/library/... । এবং একটি পারফরম্যান্স প্রশ্ন: stackoverflow.com/questions/4383919/… । ব্যক্তিগতভাবে আমি লিনকু থেকে এক্সএমএল নিয়ে কাজ করা আরও সহজ পেয়েছি।
নওফাল

উত্তর:


500

আপনি .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 এই কৌশলটি সম্পর্কে বিভিন্ন ব্লগ পোস্ট রয়েছে, একটি দ্রুত অনুসন্ধানে আমি এখানে এটি পেয়েছি


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

3
"স্কিম" বলতে কী বোঝায় এবং "শো" বলতে কী বোঝায়? হ্যাঁ, তারা উভয়ই স্ট্যান্ডার্ড এক্সএমএল নিয়ে কাজ করে তবে লিনকু থেকে এক্সএমএল বেশিরভাগ জিনিসের জন্য কেবলমাত্র একটি ভাল এপিআই। লিনকিউ থেকে এক্সএমএল এর পিছনে প্রচুর প্রযুক্তি কেবল নেট। 3.5 এর আগে পাওয়া যায় নি।
জন স্কিটি

মানে তাদের ডকুমেন্টের অবজেক্টের মডেলগুলি আলাদা কিনা?
তারিক

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

1
@ সেন্সরস্মিত: এটি অন্য সমস্ত বোনাসগুলি কভার করে না, যেমন সিকোয়েন্সগুলির স্বয়ংক্রিয় সমতলকরণ, ডেটটাইম হ্যান্ডলিং ইত্যাদির মতো আপনিও এই সমস্তগুলির জন্য এক্সটেনশন পদ্ধতি যুক্ত করতে পারেন, তবে কেন আপনি লিনিকিউ এক্সএমএলে পুনরায় উদ্ভাবন করবেন যখন আপনি কেবল এটির পরিবর্তে এটি ব্যবহার করতে পারবেন?
জন স্কিটি

57

আমি উত্তর বিস্মিত কেউ এতদূর যে উল্লেখ am XmlDocumentকোন লাইন তথ্য প্রদান করে , যখন XDocumentনা (মাধ্যমে IXmlLineInfoইন্টারফেস)।

এটি কিছু ক্ষেত্রে একটি সমালোচনামূলক বৈশিষ্ট্য হতে পারে (উদাহরণস্বরূপ যদি আপনি কোনও এক্সএমএলে ত্রুটিগুলি প্রতিবেদন করতে চান বা উপাদানগুলিকে সাধারণভাবে সংজ্ঞায়িত করা হয় তা ট্র্যাক করতে চান) এবং আপনি সুখে ব্যবহার করে প্রয়োগ করতে শুরু করার আগে আরও ভালভাবে অবগত হন XmlDocument, পরে আপনি এটি সব পরিবর্তন করতে হবে আবিষ্কার।


1
এবং আমি অবাক হয়েছি যে কেউই লক্ষ্য করেনি যে আপনার বক্তব্য বিপরীতভাবে সত্য। এক্স ডকুমেন্টটি লাইন তথ্য সরবরাহ করে যখন এক্স ডকুমেন্ট না করে।
ভিভিএস

4
@ ভিভিএস: আপনি আমাকে এক মুহুর্তের জন্য চিন্তিত করেছিলেন যে আমি একটি ভয়াবহ টাইপ করেছিলাম, তবে ডাবল চেক করার পরে আমি নিশ্চিত হয়েছি যে XDocumentলাইনের তথ্য সরবরাহ করে। দেখুন XDocument.Load সঙ্গে LoadOptions.SetLineInfoএকটি দ্বিতীয় আর্গুমেন্ট হিসাবে। XmlDocumentআমি জানতে আগ্রহী আমি সাথে লাইন তথ্য পেতে একটি উপায় জানেন ; ফিরে যখন আমি এই উত্তরটি লিখেছিলাম আমি কোনও খুঁজে পেলাম না। এই অন্যান্য উত্তর নিশ্চিত বলে মনে হয় stackoverflow.com/a/33622102/253883
জুলিয়েন Guertault

1
"এবং XMLDocament ব্যবহার করে আপনি আনন্দের সাথে প্রয়োগ করা শুরু করার আগে আপনাকে আরও ভালভাবে সচেতন হতে হবে, পরে আবিষ্কার করতে আপনাকে এটি সমস্ত পরিবর্তন করতে হবে।" অনুমান করুন যে আমি সবেমাত্র কী করেছি :)
পল

36

XmlDocumentএক্সএমএল ডোম অবজেক্ট মডেলের সাথে পরিচিত বিকাশকারীদের জন্য দুর্দান্ত। এটি প্রায় সময় হয়ে গেছে, এবং আরও বা কম ডাব্লু 3 সি স্ট্যান্ডার্ডের সাথে মিল রাখে। এটি ম্যানুয়াল নেভিগেশন পাশাপাশি XPathনোড নির্বাচন সমর্থন করে ।

XDocument.NET 3.5 তে লিনিকউ থেকে এক্সএমএল বৈশিষ্ট্যটিকে ক্ষমতা দেয়। এটি ভারী ব্যবহার করে IEnumerable<>এবং সরাসরি সি # তে কাজ করা সহজ হতে পারে।

উভয় দস্তাবেজ মডেলেরই আপনাকে পুরো দস্তাবেজটিকে মেমরিতে লোড করা প্রয়োজন ( XmlReaderউদাহরণস্বরূপ পৃথক নয়)।


3
আমি মনে করি আপনি বোঝাতে চেয়েছিলেন "এবং সরাসরি VB.net এর সাথে কাজ করা সহজ হতে পারে"। কারণ ভিবি সরাসরি উপাদানগুলির তৈরিতে সমর্থন করে যেখানে সি # এখনও কোডের প্রয়োজন।
Brain2000

24

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

আমি মাত্র লিনকিউ থেকে এক্সএমএল ব্যবহার শুরু করেছি এবং কার্যকরী নির্মাণ ব্যবহার করে আপনি যেভাবে এক্সএমএল ডকুমেন্ট তৈরি করেছেন তা আমি পছন্দ করি। এটা সত্যিই সুন্দর. তুলনায় ডিওএম আঠালো।


23

অন্যত্র উল্লিখিত হিসাবে, নিঃসন্দেহে, লিনক থেকে এক্সএমএল এক্সএমএল নথি তৈরি এবং পরিবর্তনের সাথে তুলনা করে একটি হাওয়া তৈরি করে 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)");

14

এছাড়াও, দ্রষ্টব্য যে XDocumentএক্সবক্স 360 এবং উইন্ডোজ ফোন ওএস 7.0 এ সমর্থিত। আপনি যদি তাদের লক্ষ্যবস্তু করেন তবে এর জন্য বিকাশ করুন XDocumentবা এখান থেকে মাইগ্রেট করুন XmlDocument


-8

আমি বিশ্বাস করি এটি XDocumentঅনেক বেশি অবজেক্ট তৈরির কল করে। আমার সন্দেহ হয় যে আপনি যখন প্রচুর এক্সএমএল ডকুমেন্ট পরিচালনা করছেন তখন XMLDocumentদ্রুত হবে।

স্ক্যানের ডেটা পরিচালনা করার ক্ষেত্রে এটি ঘটে এমন এক জায়গা। অনেক স্ক্যান সরঞ্জাম এক্সএমএলে তাদের ডেটা আউটপুট দেয় (স্পষ্ট কারণে)। আপনাকে যদি এই স্ক্যান ফাইলগুলির অনেকগুলি প্রক্রিয়া করতে হয় তবে আমি মনে করি আপনার সাথে আরও ভাল পারফরম্যান্স থাকবে XMLDocument


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