আমি কীভাবে দুটি এক্সএমএল ফাইলের পার্থক্য করতে পারি?


74

লিনাক্সে, আমি কীভাবে দুটি এক্সএমএল ফাইলের মধ্যে পার্থক্য তৈরি করতে পারি?

আদর্শভাবে, আমি এটি কঠোর কিছু বিষয়গুলিতে কনফিগার করতে সক্ষম হতে চাই, বা হোয়াইটস্পেস বা বৈশিষ্ট্য ক্রমের মতো কিছু জিনিস আলগা করি।

আমি প্রায়শই যত্ন নেব যে ফাইলগুলি কার্যত একই, তবে নিজে থেকে পৃথক, ব্যবহার করতে বিরক্তিকর হবে, বিশেষত যদি এক্সএমএল ফাইলটিতে অনেকগুলি লাইন ব্রেক নেই।

উদাহরণস্বরূপ, নিম্নলিখিতটি আমার পক্ষে সত্যই ঠিক হওয়া উচিত:

<tag att1="one" att2="two">
  content
</tag>

<tag att2="two" att1="one">
  content
</tag>

উত্তর:


85

একটি পদ্ধতির মধ্যে প্রথমে উভয় এক্সএমএল ফাইলকে ক্যানোনিকাল এক্সএমএলে পরিণত করা এবং ব্যবহারের ফলাফলের সাথে তুলনা করা হবে diff। উদাহরণস্বরূপ, এক্সএমলিন্ট এক্সএমএলকে ক্যানোনিকালাইজ করতে ব্যবহার করা যেতে পারে।

$ xmllint --c14n one.xml > 1.xml
$ xmllint --c14n two.xml > 2.xml
$ diff 1.xml 2.xml

বা ওয়ান-লাইনার হিসাবে।

$ diff <(xmllint --c14n one.xml) <(xmllint --c14n two.xml)

1
Xmllint --c14n স্যুইচ সম্পর্কে কখনই জানতেন না। এটা সহজ।
কায়েদী

18
আপনি এটি এক vimdiff <(xmllint --c14n one.xml) <(xmllint --c14n two.xml)
লাইনেও

ওএস এক্স
ক্লিন্টএম

10
যদি এটা সুস্পষ্ট ছিল না, c14n জন্য একটি সমাহার হয় ক্যাননিকাল করার
ব্র্যান্ডিন

3
উভয় এক্সএমএল (xmllint - formatt) ফর্ম্যাট করার আগে একটি অতিরিক্ত পদক্ষেপ কার্যকর করা ভাল। কারণ আমি লক্ষ্য করেছি যে এই পদক্ষেপটি ছাড়াই প্রয়োজনীয়তার চেয়ে বেশি পার্থক্য দেখায়।
ka3ak

23

জুক্কার উত্তর আমার পক্ষে কার্যকর হয়নি, তবে এটি ক্যানোনিকাল এক্সএমএলকে নির্দেশ করেছে। আমরাও --c14n কিংবা --c14n11 বৈশিষ্ট্যাবলী সাজানো, কিন্তু আমি এটি করেনি --exc-c14n সুইচ সাজানোর বৈশিষ্ট্যাবলী করেনি। --exc-c14n ম্যান পৃষ্ঠায় তালিকাভুক্ত নয়, তবে কমান্ড লাইনে "W3C এক্সক্লুসিভ ক্যানোনিকাল ফর্ম্যাট" হিসাবে বর্ণনা করা হয়েছে।

$ xmllint --exc-c14n one.xml > 1.xml
$ xmllint --exc-c14n two.xml > 2.xml
$ diff 1.xml 2.xml

$ xmllint | grep c14
    --c14n : save in W3C canonical format v1.0 (with comments)
    --c14n11 : save in W3C canonical format v1.1 (with comments)
    --exc-c14n : save in W3C exclusive canonical format (with comments)

$ rpm -qf /usr/bin/xmllint
libxml2-2.7.6-14.el6.x86_64
libxml2-2.7.6-14.el6.i686

$ cat /etc/system-release
CentOS release 6.5 (Final)

সতর্কতা --exc-c14n এক্সএমএল শিরোনামকে সরিয়ে দেয় যেখানে --c14n যদি না থাকে তবে এক্সএমএল শিরোনামটি প্রিপেন্ড করে।


18

@ জুলকা মাতিলাইনেনের উত্তরটি ব্যবহার করার চেষ্টা করেছিলেন তবে সাদা স্থান নিয়ে সমস্যা ছিল (ফাইলগুলির মধ্যে একটি ছিল বিশাল এক-লাইনার)। ব্যবহার --formatসাদা স্থানের পার্থক্য এড়াতে সহায়তা করে।

xmllint --format one.xml > 1.xml  
xmllint --format two.xml > 2.xml  
diff 1.xml 2.xml  

দ্রষ্টব্য: vimdiffএক্সএমএল এর পাশাপাশি তুলনা করার জন্য কমান্ডটি ব্যবহার করুন ।


আমার ক্ষেত্রে একটি স্ক্রিপ্ট দ্বারা two.xmlউত্পাদিত হয়েছিল one.xml। সুতরাং আমার কেবল স্ক্রিপ্ট দ্বারা কী যুক্ত / অপসারণ করা হয়েছে তা যাচাই করা দরকার।
গুরুম

1
এই অপশনটি আমার প্রয়োজন ছিল। ধারণা করা যায় এর --formatসাথে একত্রিত হয়ে সবচেয়ে প্রাসঙ্গিক সংস্করণ পাওয়া যেতে পারে --exc-c14n; সম্ভবত এখনো ধীর হতে হবে :( প্রক্রিয়া
ᴠɪɴᴄᴇɴᴛ

আমি উত্তরটি লেখার পরে বেশ কিছুটা সময় হয়ে গেছে তবে আমি --exc-c14n পতাকাটি ব্যবহার করা খুব অবিশ্বাস্যর সাথে মনে আছে। তবে, পতাকাটি ছাড়াই / ছাড়াই আউটপুটকে ডিফ-ইনিং কোনও পার্থক্য দেখায়নি তাই এটি ব্যবহার বন্ধ করে দিয়েছে। অপ্রয়োজনীয় / অব্যবহৃত পতাকা ফেলে দেওয়া প্রক্রিয়াটি দ্রুততর করতে পারে।
গুরুএম

5
--exc-c14nবিকল্প গুণাবলীর বাছাই নির্দিষ্ট করে। আপনার নির্দিষ্ট ফাইলগুলিতে বৈশিষ্ট্যগুলি সম্ভবত ইতিমধ্যে সাজানো হয়েছে, তবে সাধারণ পরামর্শটি হবে সংমিশ্রণটি ব্যবহার করা --format --exc-c14n
ᴠɪɴᴄᴇɴᴛ

6

ডিফএফএক্সএমএল বেসিক কার্যকারিতাটি সঠিক করে তোলে , যদিও এটি কনফিগারেশনের জন্য অনেকগুলি বিকল্প প্রস্তাব করে না।

সম্পাদনা করুন: প্রকল্প ডিফেক্সএমএল ২০১৩ সাল থেকে গিটহাবে স্থানান্তরিত হয়েছে।


এটি এখনও সেখানে নেই, তবে এটি কমপক্ষে প্রতিশ্রুতিবদ্ধ দেখাচ্ছে।
কায়েদী

যদিও বড় ফাইলগুলির জন্য দরকারী নয়, 40 জিবি (র‌্যাম + সোয়াপ) খাওয়ার পরে মারা গেলেন যখন দুটি ফাইলের প্রতি 20 কে লাইন তুলনা করছেন
গ্রজেগোর্জ

নোট করুন যে প্রকল্পটি 2013 সালে শেষ আপডেটের সাথে মৃত বলে মনে হচ্ছে
ম্যাটিউজ কোনিস্কনি

4

আপনি যদি শিশু উপাদানগুলির ক্রমটিও উপেক্ষা করতে চান তবে আমি এইটির জন্য একটি সাধারণ অজগর সরঞ্জাম লিখেছিলাম xmldiffs:

উপাদান এবং গুণাবলীর ক্রম উপেক্ষা করে দুটি এক্সএমএল ফাইলের তুলনা করুন।

ব্যবহার: xmldiffs [OPTION] FILE1 FILE2

কোনও অতিরিক্ত বিকল্প diffকমান্ডে প্রেরণ করা হয় ।

এটি https://github.com/joh/xmldiffs এ পান


1

এক্সটিএমএল ফাইলগুলির তুলনা করার জন্য আমার পাইথন স্ক্রিপ্ট xdiff.py হোয়াইটস্পেস বা বৈশিষ্ট্য ক্রমের (উপাদান ক্রমের বিপরীতে) পার্থক্য উপেক্ষা করে।

দুটি ফাইলের তুলনা করতে 1.xmlএবং 2.xml, আপনি নিম্নলিখিতটি স্ক্রিপ্টটি চালাবেন:

xdiff.py 1.xml 2.xml

ওপি'র উদাহরণে, এটি কোনও কিছুই আউটপুট দেয় এবং প্রস্থান স্থিতি 0(কোনও কাঠামোগত বা পাঠ্যগত পার্থক্য ছাড়াই) ফেরত দেয় ।

কাঠামোগতভাবে 1.xmlএবং 2.xmlপৃথক ক্ষেত্রে , এটি GNU ডিফের একীভূত আউটপুটকে নকল করে এবং প্রস্থান স্থিতি ফিরে আসে 1। আউটপুট নিয়ন্ত্রণের জন্য বিভিন্ন বিকল্প রয়েছে যেমন -aসমস্ত প্রসঙ্গকে -nআউটপুট দেওয়ার জন্য , কোনও প্রসঙ্গে -qআউটপুট দেওয়ার জন্য এবং পুরোপুরি আউটপুট দমন করার জন্য (এখনও বহির্গমন স্থিতি ফিরে আসার সময়)।


0

আমি সমস্ত ধরণের পাঠ্য ভিত্তিক ফাইলের তুলনা করতে তুলনা ছাড়িয়ে ব্যবহার করি । তারা উইন্ডোজ এবং লিনাক্সের জন্য সংস্করণ তৈরি করে।


1
সরল পাঠ্যের তুলনাটি বলবে যে দুটি লাইনের মধ্যে পার্থক্য রয়েছে, অন্যদিকে ওপি তাদের অনুরূপ হিসাবে প্রতিবেদন করতে চায়।
ক্রিসএফ

4
অর্থাত্ XML সাথে তুলনা করুন।
ক্রিস ডাব্লিউ। রিয়া 20

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

তুলনার বাইরে একটি এক্সএমএল প্লাগইন রয়েছে তবে আমি এটি কখনই সঠিকভাবে ইনস্টল করতে সক্ষম হইনি, তাই ... না ... আমি এই পৃষ্ঠায় এসে আরও বিজ্ঞ হয়ে উঠি ...
ইরক

-1

আমাদের এসডি স্মার্ট ডিফারেন্সার কাঠামোর ভিত্তিতে প্রকৃত লেআউটের বিপরীতে নথিগুলির তুলনা করে ।

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


1
আপনার এসও প্রোফাইলে আপনি আপনার নিয়োগকর্তা সম্পর্কে সম্পূর্ণ প্রকাশ করেন; আমি আপনার উত্তরটির ভিতরেও একটি সংক্ষিপ্ত দাবি অস্বীকার করতে পছন্দ করেছি :) বিটিডাব্লু, আমি একটি মূল্যায়ন অনুলিপি ডাউনলোড করার চেষ্টা করেছি, তবে অনুরোধ ফর্মটি 'স্মার্ট' (জেএসের মাধ্যমে) যথেষ্ট পরিমাণে স্মার্ট ডিফারেন্সারের সাথে এক্সএমএল অক্ষম করতে সক্ষম (পরেও) পাইথনের সংমিশ্রণে, এসডি পণ্য পৃষ্ঠা অনুসারে যদিও সম্ভব)?
ᴠɪɴᴄᴇɴᴛ

1
আহ। অনুস্মারক জন্য ধন্যবাদ। এটি সম্পর্কে সুস্পষ্ট এসও নীতিমালা থাকার আগে থেকেই এটি উত্তর। আমি এসও নীতির আনুগত্যের উত্তরে সম্পর্কের সিগন্যালের উত্তরটি সংশোধন করছি।
ইরা

আমি ডাউনলোড পৃষ্ঠাটি যাচাই করব; আমাদের লাইভ পণ্যগুলির সমস্তই সেই তালিকা তৈরি করে না। হ্যাঁ, এগুলি বিদ্যমান।
ইরা

আমি ডাউনলোড পৃষ্ঠাটি পরীক্ষা করেছি। হ্যাঁ, এক্সএমএল স্মার্ট ডিফারারটি নেই। আমার পিছনের ঘরে লোকেরা এটি ঠিক করার কাজ করবে; সর্বাধিক 1-2 সপ্তাহে সেখানে থাকা উচিত (তাদের একটি ব্যাকলগ রয়েছে, আমরা সবাই কি না?) ইতিমধ্যে আপনি যদি এটি চেষ্টা করতে চান তবে ইমেল প্রেরণ করুন (বায়ো দেখুন)।
ইরা বাক্সার

1
লিঙ্কযুক্ত পৃষ্ঠায় এটিতে "এক্সএমএল" শব্দ নেই।
ম্যাটিউজ কোনিস্কনি

-1

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

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