আমরা কি এক্সএমএল ফাইলটিকে অন্য একটি এক্সএমএল ফাইলে আমদানি করতে পারি?
আমার অর্থ XML- এ এমন কোনও আমদানি ট্যাগ রয়েছে যা XML পথটিকে প্যারামিটার হিসাবে গ্রহণ করে এবং এক্সএমএল আমদানি করে (যার জন্য পথ সরবরাহ করা হয়)।
উত্তর:
আপনি সত্তাকে এভাবে ঘোষণা করুন:
<!ENTITY otherFile SYSTEM "otherFile.xml">
তারপরে আপনি এটিকে এভাবে উল্লেখ করুন:
&otherFile;
একটি সম্পূর্ণ উদাহরণ:
<?xml version="1.0" standalone="no" ?>
<!DOCTYPE doc [
<!ENTITY otherFile SYSTEM "otherFile.xml">
]>
<doc>
<foo>
<bar>&otherFile;</bar>
</foo>
</doc>
এক্সএমএল পার্সার ফাইলটি পড়লে এটি সত্তার রেফারেন্সটি প্রসারিত করবে এবং সামগ্রীটির অংশ হিসাবে রেফারেন্সড এক্সএমএল ফাইলটি অন্তর্ভুক্ত করবে।
যদি "otherFile.xML" থাকে: <baz>this is my content</baz>
তারপরে এক্সএমএলকে এক্সএমএল পার্সার দ্বারা মূল্যায়ন করে "দেখা" হবে:
<?xml version="1.0" standalone="no" ?>
<doc>
<foo>
<bar><baz>this is my content</baz></bar>
</foo>
</doc>
কয়েকটি তথ্যসূত্র যা সহায়ক হতে পারে:
XMLResolver
সম্পত্তি সেট করা আছে তা দেখতে হবে। যদি XMLResolver বৈশিষ্ট্যটি আপনার XMLDocament অবজেক্টে সেট না করা থাকে তবে এটি বাহ্যিক সংস্থানগুলি লোড নাও করতে পারে। msdn.microsoft.com/en-us/library/5fcwybb2.aspx
অন্যান্য উত্তরগুলিতে 2 অতি সাধারণ পন্থা, এক্সক্লুড এবং এক্সএমএল বাহ্যিক সত্ত্বাকে অন্তর্ভুক্ত করে। জিনক্লাইডকে কেন পছন্দ করা উচিত, সেই সাথে বেশ কয়েকটি উদাহরণ বাস্তবায়নও মাইক্রোসফ্টের কাছে সত্যিই দুর্দান্ত রচনাআপ। আমি নীচের তুলনা উদ্ধৃত করেছি:
প্রতি http: //msdn.mic Microsoft.com/en-us/library/aa302291.aspx
কেন এক্সআইনক্লুড?
প্রথম প্রশ্নটি যেটি জিজ্ঞাসা করতে পারে তা হ'ল "এক্সএমএল বহিরাগত সত্তাগুলির পরিবর্তে কেন এক্সআইঙ্কলড ব্যবহার করবেন?" উত্তরটি হ'ল এক্সএমএল বাহ্যিক সত্ত্বাগুলির বেশ কয়েকটি সুপরিচিত সীমাবদ্ধতা এবং অসুবিধাজনিত জড়িত প্রভাব রয়েছে, যা কার্যকরভাবে তাদেরকে সাধারণ-উদ্দেশ্য অন্তর্ভুক্তির সুবিধা হতে বাধা দেয়। বিশেষত:
- একটি এক্সএমএল বাহ্যিক সত্তা একটি পূর্ণ-বিকাশযুক্ত স্বাধীন এক্সএমএল নথি হতে পারে না — এককভাবে এক্সএমএল ঘোষণা বা ডক্টাইপ ঘোষণার অনুমতি নেই। এর কার্যকরভাবে অর্থ হল একটি এক্সএমএল বাহ্যিক সত্তা নিজেই অন্যান্য বাহ্যিক সত্তাকে অন্তর্ভুক্ত করতে পারে না।
- একটি এক্সএমএল বহিরাগত সত্তা অবশ্যই অবশ্যই সঠিকভাবে এক্সএমএল গঠন করা উচিত (প্রথম নজরে তেমন খারাপ নয়, তবে ধারণা করুন যে আপনি নমুনা সি # কোডটি আপনার এক্সএমএল নথিতে অন্তর্ভুক্ত করতে চান) want
- বাহ্যিক সত্তা লোড করতে ব্যর্থতা মারাত্মক ত্রুটি; যে কোনও পুনরুদ্ধার কঠোরভাবে নিষিদ্ধ।
- কেবলমাত্র পুরো বাহ্যিক সত্তাকেই অন্তর্ভুক্ত করা যেতে পারে, কেবলমাত্র নথির কোনও অংশ অন্তর্ভুক্ত করার উপায় নেই। - বাহ্যিক সত্তা অবশ্যই একটি ডিটিডি বা একটি অভ্যন্তরীণ উপসেটে ঘোষণা করতে হবে। এটি পুরোপুরি পুরোপুরি একটি প্যান্ডোরার বাক্স খুলবে যেমন ডক্টাইপ ঘোষণায় ডকুমেন্ট উপাদানটির নামকরণ করা আবশ্যক এবং বৈধতা পাঠকদের প্রয়োজন হতে পারে যে নথির সম্পূর্ণ সামগ্রীর মডেলটি অন্যদের মধ্যে ডিটিডিতে সংজ্ঞায়িত করা উচিত।
অন্তর্ভুক্তি প্রক্রিয়া হিসাবে এক্সএমএল বাহ্যিক সত্ত্বাগুলি ব্যবহারের ঘাটতিগুলি কিছু সময়ের জন্য জানা ছিল এবং প্রকৃতপক্ষে মাইক্রোসফ্ট এবং আইবিএম দ্বারা ১৯৯৯ সালে ডাব্লু 3 সিতে এক্সএমএল অন্তর্ভুক্তি প্রস্তাব জমা দেওয়ার কারণ তৈরি হয়েছিল। প্রস্তাবটি সাধারণ উদ্দেশ্যে এক্সএমএল অন্তর্ভুক্তি সুবিধার জন্য একটি প্রসেসিং মডেল এবং বাক্য গঠনকে সংজ্ঞায়িত করে।
চার বছর পরে, এক্সএমএল অন্তর্ভুক্তির সংস্করণ 1.0, যা জিনক্লাইড নামেও পরিচিত, এটি একটি প্রার্থী সুপারিশ, যার অর্থ ডাব্লু 3 সি বিশ্বাস করে যে এটি বিস্তৃতভাবে পর্যালোচনা করা হয়েছে এবং এটি সমাধানের জন্য নির্ধারিত বেসিক প্রযুক্তিগত সমস্যাগুলি সন্তুষ্ট করেছে, তবে এটি এখনও একটি নয় সম্পূর্ণ সুপারিশ।
আরেকটি ভাল সাইট যা বিভিন্ন ধরণের উদাহরণস্বরূপ বাস্তবায়ন সরবরাহ করে তা হ'ল https://www.xML.com/pub/a/2002/07/31/xinclude.html । নীচে তাদের সাইটের সাধারণ ব্যবহারের কেস উদাহরণ রয়েছে:
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<title>The Wit and Wisdom of George W. Bush</title>
<xi:include href="malapropisms.xml"/>
<xi:include href="mispronunciations.xml"/>
<xi:include href="madeupwords.xml"/>
</book>
ম্যাডস হ্যানসেনের সমাধানটি ভাল তবে .NET 4 এ বাহ্যিক ফাইলটি পড়তে সফল হতে সমাধানকারীদের, প্রোহিবিডিটিটিডি এবং অন্যান্য সম্পর্কে মন্তব্যগুলিতে ইঙ্গিতগুলি ব্যবহার করে কিছুটা সময় নিয়েছিল।
এই তার কাজ হল কিভাবে:
XmlReaderSettings settings = new XmlReaderSettings();
settings.DtdProcessing = DtdProcessing.Parse;
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials;
settings.XmlResolver = resolver;
var reader = XmlReader.Create("logfile.xml", settings);
XmlDocument doc = new XmlDocument();
doc.Load(reader);
foreach (XmlElement element in doc.SelectNodes("//event"))
{
var ch = element.ChildNodes;
var count = ch.Count;
}
লগফিল.এক্সএমএল:
<?xml version="1.0"?>
<!DOCTYPE logfile [
<!ENTITY events
SYSTEM "events.txt">
]>
<logfile>
&events;
</logfile>
ইভেন্টস টেক্সট:
<event>
<item1>item1</item1>
<item2>item2</item2>
</event>