আমরা কি এক্সএমএল ফাইলটিকে অন্য একটি এক্সএমএল ফাইলে আমদানি করতে পারি?


84

আমরা কি এক্সএমএল ফাইলটিকে অন্য একটি এক্সএমএল ফাইলে আমদানি করতে পারি?

আমার অর্থ XML- এ এমন কোনও আমদানি ট্যাগ রয়েছে যা XML পথটিকে প্যারামিটার হিসাবে গ্রহণ করে এবং এক্সএমএল আমদানি করে (যার জন্য পথ সরবরাহ করা হয়)।

উত্তর:


95

আপনি একটি বাহ্যিক (পার্সড) সাধারণ সত্তা ব্যবহার করতে পারেন ।

আপনি সত্তাকে এভাবে ঘোষণা করুন:

<!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>

কয়েকটি তথ্যসূত্র যা সহায়ক হতে পারে:


4
হাই ম্যাডস, আমি এতে আটকে আছি, যা ঘটছে তা যখন আমি আইইনে আমার মেইন.এক্সএমএল ফাইলটি দেখি তখন আমি আমার অন্যান্য ফাইল.এক্সএমএলটির পাঠ্যটি সঠিকভাবে পাচ্ছি তবে যখন আমি আমার অ্যাপ্লিকেশনটিতে একই ধারণাটি ব্যবহার করি এবং আমার এক্সএমএল এক্সএমএল ডকুমেন্টে লোড করি নেট। এর পরে আমি অন্য ফাইল.এক্সএমএল এর পাঠ্য পাচ্ছি না এর পরিবর্তে আমি মেইন.এক্সএমএল এ যা কিছু <? xML সংস্করণ = "1.0" স্ট্যান্ডেলোন = "না"?> <! ডক্টইপি ডক [<! ENTITY otherFile সিস্টেম "otherFile.xML">]> <ডক> <foo> <bar> & otherFile; </bar> </foo> </doc> আপনি কি আমাকে বলতে পারেন যদি আমার এটিতে লোড করার জন্য আমাকে অন্য কিছু করার দরকার হয় xmldocament ???
সুমিত

4
আমি নেট নেট এর সাথে খুব বেশি পরিচিত নই। তবে আপনাকে কী XMLResolverসম্পত্তি সেট করা আছে তা দেখতে হবে। যদি XMLResolver বৈশিষ্ট্যটি আপনার XMLDocament অবজেক্টে সেট না করা থাকে তবে এটি বাহ্যিক সংস্থানগুলি লোড নাও করতে পারে। msdn.microsoft.com/en-us/library/5fcwybb2.aspx
ম্যাডস হানসেন

4
ক্রোমের মতো ব্রাউজারগুলি কি এটি বোঝে?
Alp

4
স্থানীয় ফাইলগুলির সুরক্ষার কারণে ব্রাউজারগুলি এটিকে অক্ষম করতে পারে। ক্রোমের জন্য ফাইলগুলি অ্যাক্সেস-থেকে-ফাইল-অ্যাক্সেস-থেকে সুইচ ব্যবহার করুন বা হোস্টে আপলোড করুন
premek.v

4
.NET- এ, পূর্বের অনুমতিের সমস্যাগুলি পেতে XMLReaderSettings- এ XMLResolver (একটি ডিফল্ট XMLUriResolver তৈরি করে) এবং ProhibitDTD (মিথ্যাতে) সেট করুন। ডিফল্টরূপে, এটি উইন্ডোজ / .NET সুরক্ষা নীতি বাহ্যিক সংস্থানগুলি লোড করার অনুমতি দেয় না বলে মনে হয়।
জন যিশু

26

অন্যান্য উত্তরগুলিতে 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>

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

আমি আপনার প্রতিক্রিয়া এবং শ্রদ্ধার জন্য কৃতজ্ঞ যে আপনি একটি উদাহরণ যোগ করে সমস্যাটি সমাধান করার চেষ্টা করেছিলেন, তবে আমি মনে করি আপনার উত্তর এখনও মৌলিকভাবে ত্রুটিযুক্ত। সাধারণত, অন্য কোথাও থেকে পাঠ্য উদ্ধৃতি দেওয়ার সময়, আপনাকে সেই পাঠকটি একটি ব্লককোটে অন্তর্ভুক্ত করা উচিত (যাতে আপনি চুরি করা চেষ্টা করছেন না এটি স্পষ্টভাবে) এবং আরও গুরুত্বপূর্ণ, আপনার নিজের আলোচনা ব্লককোটের উপরে / নীচে প্রদান করা উচিত যা আপনি কেন উদ্ধৃতি দিয়েছেন তা খুব স্পষ্টভাবে ব্যাখ্যা করে explains এটি নির্দিষ্ট পাঠ্য এবং কীভাবে এটি প্রশ্নের উত্তর দিতে সহায়তা করে। যদি এই দুটি জিনিসই করে আবারও মন্তব্য করে (যাতে আমি বিজ্ঞাপিত হয়ে যাই) আমি আনন্দের সাথে আমার মন্তব্য মুছে ফেলব এবং আমার ডাউনটি প্রত্যাহার করব।
ড্যান বেচার্ড

ব্লক কোট এবং মন্তব্যে আপডেট হয়েছে
ভোটকফি

এটি একটি উল্লেখযোগ্যভাবে ভাল উত্তর! আপভোটেড এবং আমার প্রথম মন্তব্যটি মুছে ফেলেছে যা আর সত্য নয়। আমি অন্যান্য মন্তব্য প্রসঙ্গে এবং আশা করি ভবিষ্যতের পাঠকদের আরও ভাল উত্তর লিখতে সহায়তা করার জন্য করব।
ড্যান বেচার্ড

11

আমি চেষ্টা করে হয়নি msdn.microsoft.com/en-us/library/aa302291.aspx কিন্তু কোন ব্যবহার সঙ্গে :( আমার XML গুলি গ্রহণ main.xml <XML সংস্করণ = "1.0"??> <Head> <একাদশ আছেন: সূরা অন্তর্ভুক্ত = "Import.xML" xmlns: xi = " w3.org/2003/XIncolve" > </Head> আমদানি করা। xml <? xML সংস্করণ = "1.0"?> <ফুটার> © কনটোস কর্প, 2003 </footer> এবং আমার প্রাপ্ত চূড়ান্ত এক্সএমএলটি হল। <? xML version = "1.0"?> <Had> <xi: href = "Import.xML" xmlns: xi = " w3.org/2003/XIncolve " /> <<< আমি কি কিছু ভুল করছি?
সুমিত

জাভাতে, এক্সআইঙ্কলডের পক্ষে সমর্থন অবশ্যই স্পষ্টভাবে সক্ষম করা উচিত। আপনার লাইব্রেরিতেও কি একই প্রস্তুতি দরকার?
টমাসজ নুরকিউইচ

আমি এক্সএমএল পার্স করার জন্য নেট ব্যবহার করছিলাম, আমি ম্যাডস সলিউশন দ্বারা এক্সএমএল আমদানি করতে সক্ষম হয়েছি .. আপনার সময়ের জন্য ধন্যবাদ ..
সুমিত

4
libxML এটি দুর্দান্ত, দুর্দান্ত সমর্থন করে।
ষি

4
জাভা জন্য নীচের লাইন যুক্ত করা প্রয়োজন - ডকুমেন্টবিল্ডারফ্যাক্টরি dbFactory = ডকুমেন্টবিল্ডারফ্যাক্টরি.নিউআইইনস্ট্যানস (); dbFactory.setXIncludAware (সত্য);
রাহুল সাহু

1

ম্যাডস হ্যানসেনের সমাধানটি ভাল তবে .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>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.