Command Palette

Search for a command to run...

فرق XML: قارن بين ملفي XML حسب البنية، وليس حسب السطر

فرق XML: قارن بين ملفي XML حسب البنية، وليس حسب السطر

T
Toolz Team
|Aug 23, 2026|15 دقيقة قراءة

جزء من مجموعة فرق و قارن

لقد فقدت فترة ما بعد الظهر مرة واحدة أمام ملف التكوين الذي &quot؛ تم التغيير والاقتباس؛ بين عمليتي نشر. كان الفرق في محطتي عبارة عن جدار أحمر، ومئات الأسطر، وقضيت ساعة في البحث عن التغيير الحقيقي قبل أن أدرك أن خط أنابيب النشر قد أعاد تنسيق الملف: أعاد وضع مسافة بادئة له، وأعاد ترتيب بعض السمات، وأعاد تغليف بعض الأسطر الطويلة. لم تتغير بالفعل بايت واحد قد يهتم به المحلل اللغوي، باستثناء قيمة واحدة مدفونة في الضوضاء. لا يمكن للفرق القائم على الخط أن يخبرني بذلك، لأن الفرق القائم على الخط لا يفهم XML. يدور هذا الدليل حول مقارنة XML بالطريقة التي تستحق مقارنتها باستخدام مدقق فرق XML على Toolz.dev، ولماذا تجد المقارنة الهيكلية التغيير الوحيد المهم بدلاً من إغراقه في التنسيق.

ليرة تركية؛DR: يقارن فرق XML مستندين كأشجار عقدة، وليس كأسطر من النص، لذا لا يتم تسجيل إعادة المسافة البادئة أو إعادة ترتيب السمات أو إعادة تغليف الأسطر كتغيير. فهو يُبلغ عن العناصر والسمات وقيم النص التي تمت إضافتها أو إزالتها أو تغييرها، وتم تثبيت كل منها على مسار العقدة. ال مدقق فرق XML قم بذلك بالكامل في متصفحك، دون تحميل أي شيء.

ما هو مدقق فرق XML؟

يقارن مدقق فرق XML مستندين من مستندات XML ويبلغ عما تغير كمجموعة من الاختلافات الهيكلية: ما هي العناصر التي ظهرت أو اختفت، وما هي السمات التي تغيرت قيمتها، وأين يختلف محتوى النص. بدلاً من مقارنة الملفات سطرًا تلو الآخر، يتم توزيعها إلى أشجار العقد ومقارنتها كبيانات. يمكنك لصق النسخة الأصلية على اليسار، والإصدار الجديد على اليمين، والحصول على قائمة الاختلافات، كل منها مُسمى بالمسار الدقيق في الشجرة التي حدث فيها ذلك.

الهدف من المقارنة الهيكلية هو أن XML يحمل نفس المعنى عبر العديد من تخطيطات البايت المختلفة. ال مواصفات W3C XML من الواضح أن بعض تفاصيل السطح لا تؤثر على المستند الذي تم تحليله: ترتيب السمات على العنصر ليس مهمًا، وعادةً ما تكون المسافة البيضاء بين العناصر مجرد تنسيق. يمكن أن يكون الملفان متطابقين من الناحية الهيكلية مع اختلاف المسافة البادئة أو ترتيب السمات أو نهايات الأسطر أو ما إذا كان العنصر الفارغ مكتوبًا كـ <tag></tag> أو <tag/>. يشير اختلاف النص العادي إلى كل ذلك؛ يتجاهله الاختلاف الهيكلي ويظهر فقط ما قد يقرأه المحلل اللغوي بشكل مختلف.

في Toolz.dev، يكون سير العمل قصيرًا. الصق كلا المستندين، واختر ما إذا كنت تريد تجاهل المسافات البيضاء أو السمات أو الحالة، ثم اضغط على مقارنة. تقوم الأداة بتوزيع كل الأشجار وسرد كل الفرق حسب المسار، وتجميعها في إضافة وإزالة وتغيير، مع القيم القديمة والجديدة جنبًا إلى جنب.

كيف يختلف فرق XML عن فرق النص؟

فرق النص، وهو النوع المدمج في Git ومعظم المحررين، يقارن الملفات كتسلسلات من الأسطر ويجد أقصر مجموعة من عمليات الإدراج والحذف التي تحول واحدة إلى أخرى. هذا صحيح تمامًا بالنسبة للكود المصدري، حيث تكون الأسطر وحدات ذات معنى. إنه النموذج الخاطئ لـ XML، حيث يعيش المعنى في الشجرة وتكون فواصل الأسطر عبارة عن زخرفة.

أوضاع الفشل يمكن التنبؤ بها. أعد ربط المستند والنص الذي يشير إلى كل سطر تم تغييره تقريبًا. أعد ترتيب سمتين على عنصر واحد وقم بوضع علامة على هذا السطر على الرغم من أن العنصر مطابق للمحلل اللغوي. أضف طفلًا واحدًا بالقرب من الأعلى ويتغير كل سطر أسفله، بحيث يُظهر الفرق سلسلة من الحركات التي لا تتغير حقًا. ينتهي بك الأمر بمسح مئات الأسطر التي تم وضع علامة عليها للعثور على السطر المهم، وهو فترة ما بعد الظهر التي وصفتها أعلاه.

يتجنب الاختلاف الهيكلي كل ذلك عن طريق التحليل أولاً. فهو يبني شجرة من كل مستند، ثم يمشي بين الشجرتين معًا لمقارنة العقد. اختلافات التنسيق ببساطة غير موجودة على مستوى الشجرة، لذلك لا يمكن أن تظهر في الإخراج. ما تبقى هو مجموعة التغييرات التي من شأنها أن تغير كيفية تصرف البرامج التي تستهلك XML، وهي دائمًا المجموعة التي تهتم بها بالفعل. إذا كانت بياناتك هي JSON بدلاً من XML، فسيتم تطبيق نفس المبدأ و فرق JSON تقوم الأداة بإجراء المقارنة الهيكلية المكافئة هناك.

كيف تقرر ما تغير؟

تتم المقارنة في ثلاث طبقات عند كل عنصر، وفصلها هو ما يجعل الإخراج قابلاً للقراءة.

تتم مقارنة السمات بالاسم، بغض النظر عن الترتيب الذي تظهر به في العلامة، لأن ترتيب السمات ليس مهمًا في XML. بالنسبة لكل عنصر، تتحقق الأداة من السمات الموجودة على كلا الجانبين، وتبلغ عن السمة على أنها تغيرت عندما تختلف قيمتها، أو تضاف عندما تظهر على اليمين فقط، أو تتم إزالتها عندما تظهر على اليسار فقط. إعادة ترتيب <a x="1" y="2"/> إلى <a y="2" x="1"/> لا ينتج أي فرق على الإطلاق.

تتم مقارنة محتوى النص بالنص المباشر لكل عنصر. مع تشغيل المسافات البيضاء، يتم طي المسافات والأسطر الجديدة ويتم قطع المسافات البيضاء البادئة والخلفية، لذا فإن الطباعة الجميلة للمستند لا تؤدي إلى تغييرات نصية وهمية. يتم الإبلاغ فقط عن تغيير حقيقي في الكلمات بين العلامات.

العناصر الفرعية هي الجزء المثير للاهتمام. يتم إقران العناصر التي تشترك في اسم العلامة حسب ترتيب ظهورها: الأول <item> على اليسار تتم مقارنته بالأول <item> على اليمين، الثاني إلى الثاني، وهكذا. عندما يكون لدى أحد الجانبين تكرارات أكثر من الآخر، يتم الإبلاغ عن الإضافات على أنها تمت إضافتها أو إزالتها بدلاً من فرض محاذاة خاطئة. قاعدة الترتيب هذه هي ما يمنع التغيير البسيط في عنصر واحد متكرر من التتالي إلى اختلاف بين كل أخ.

وإليك كيفية تكديس نموذجي المقارنة

جانب اختلاف النص فرق XML (الهيكلية)
مقارنة الوحدة سطور النص العقد في الشجرة
إعادة التجاوز يظهر كتغييرات تجاهل
إعادة ترتيب السمات يظهر كتغيير تجاهل
التقارير تغير الموقع رقم السطر مسار العقدة، على سبيل المثال/الكتالوج/الكتاب[2]/@id
يميز العنصر مقابل السمة مقابل النص لا نعم
الأفضل ل كود المصدر، النثر تكوين XML، وحمولات API، وSVG، وخرائط الموقع

مثال ملموس يوضح الطبقات. خذ كتالوج كتب صغير حيث، بين نسختين، يتغير سمة فئة كتاب واحد &#39؛ من الخيال إلى الغموض، ويتغير نص السعر من 12.99 إلى 14.99، ويكتسب الكتاب الثاني عنصر isbn جديد. سيشير فرق الخط إلى الثلاثة بالإضافة إلى أي إعادة مسافة حولهم، مختلطة معًا. يُبلغ الفرق الهيكلي عن ثلاثة اختلافات بالضبط: سمة متغيرة في مسار الفئة، وعقدة نصية متغيرة في مسار السعر، وعنصر مضاف في مسار isbn. يتم وضع علامة على كل منها بنوعها، بحيث يمكنك معرفة لمحة سريعة أن اثنين كانا عبارة عن تعديلات على البيانات الموجودة وواحد كان إضافة حقيقية. هذا الفصل هو الفرق بين قراءة التقرير وفك تشفيره.

تقوم الأداة أيضًا بتجميع النتائج في علامات تبويب تمت إضافتها وإزالتها وتغييرها مع عدد قيد التشغيل، حتى تتمكن من الإجابة على الأسئلة التقريبية أولاً، مثل &quot؛ هل تم حذف أي شيء، &quot؛ قبل التنقيب في التفاصيل. في مستند كبير، يكون هذا الترتيب مهمًا: غالبًا ما تكون عمليات الإزالة هي التغيير الأكثر خطورة، لأن العنصر المسقط يمكنه تجريد الحقل المطلوب بصمت، والقدرة على عزله دون الخوض في التعديلات غير ذات الصلة يعد توفيرًا في الوقت الفعلي.

ماذا يعني مسار العقدة في الاختلاف؟

تتم تسمية كل اختلاف بمسار يخبرك بالضبط بمكان وجوده في الشجرة، حتى تتمكن من الانتقال إليه بدلاً من مسح الملف ضوئيًا. يتم إنشاء المسار من أسماء العناصر، ويتم ربطها بشرطات مائلة من الجذر إلى الأسفل. عندما يكون للعنصر أشقاء يحملون نفس الاسم، فإن الفهرس ذو الأساس الواحد الموجود بين قوسين يوضح أي منهم، لذلك /catalog/book[2] هو الكتاب الثاني. السمة مكتوبة مع @ البادئة، كما في /catalog/book[1]/@category، ويتم وضع علامة على تغيير النص بـ text()كما في /catalog/book[2]/price/text().

هذا التدوين قريب عمدا من XPath، لغة W3C لمعالجة العقد في مستند XML، لذلك إذا قرأت XPath بالفعل، فستشعر المسارات بأنها مألوفة ويمكنك غالبًا لصق تعبير مشابه في الأدوات الخاصة بك لتحديد نفس العقدة. حتى بدون معرفة XPath، تقرأ المسارات بشكل طبيعي: الأسماء تنزل إلى أسفل الشجرة، والأقواس تختار أخًا، @ هي سمة، و text() هو المحتوى.

ولأن المسار يذكر نوع التغيير أيضًا، فإن التقرير يجيب على ثلاثة أسئلة في وقت واحد: ما الذي تغير، وأين يعيش، وما إذا كان عنصرًا أو سمة أو نصًا. وهذا يكفي عادةً لفتح الملف الصحيح وإصلاح السطر الأيمن دون أي بحث آخر.

متى سأستخدم هذا بالفعل؟

انحراف التكوين هو الحالة التي ضربتها أكثر. عندما تتصرف الخدمة بشكل مختلف بين بيئتين والمشتبه به الوحيد هو تكوين XML، فإن مقارنة الملفين تخبرك هيكليًا في ثوانٍ ما إذا كانت القيمة قد تغيرت بالفعل أو قام شخص ما بإعادة تنسيق الملف للتو. وينطبق الشيء نفسه على إنشاء ونشر خطوط الأنابيب التي تعيد كتابة XML، حيث تحتاج إلى تأكيد أن التحويل قد تغير فقط عما كان من المفترض أن يحدث.

واجهة برمجة التطبيقات وعمل التكامل هو التالي. لا تزال استجابات SOAP وخلاصات RSS وAtom وواجهات برمجة تطبيقات REST الأقدم تتحدث لغة XML، وعندما تتوقف الحمولة عن التحليل الصحيح للفرق الهيكلي مقابل عينة معروفة جيدة، يتم تحديد العنصر المخالف بسرعة. SVG هو XML أيضًا، لذا فإن مقارنة رمزين تم تصديرهما توضح بالضبط المسار أو السمة التي تم تغييرها بواسطة المحرر. خرائط الموقع، وملفات تخطيط Android، وMaven POMs، و .docx الأجزاء الداخلية كلها XML تحت الغطاء، وكلها تستفيد من نفس المعاملة. أقوم بالبناء عبر المكدس، ويظهر XML في زوايا أكثر مما يتوقعه الناس، ولهذا السبب يعيش هذا بجوار تنسيق XML و XML إلى JSON في إشاراتي المرجعية. لقد رسمت كيف تناسب هذه المجموعة الأوسع في دليل JSON إلى XML.

هناك زاوية لمراجعة التعليمات البرمجية أيضًا. عندما يلمس طلب السحب أداة XML أو ملفًا تم إنشاؤه، غالبًا ما يكون الاختلاف الأولي في واجهة مستخدم المراجعة غير قابل للقراءة لأن المنسق أعاد كتابة الأمر برمته. يؤدي تشغيل ما قبل وبعد المقارنة الهيكلية، ثم لصق التقرير القصير في المراجعة، إلى إخبار المراجع الخاص بك بما تغير بالفعل في نظرة واحدة بدلاً من مطالبته بالثقة في جدار باللون الأحمر. يوجد تقرير نصي قابل للنسخ للأداة & #39؛ لذلك بالضبط: ملخص مضغوط لكل عقدة تمت إضافتها وإزالتها وتغييرها بقيمها قبل وبعد، جاهزة للهبوط في تذكرة أو رسالة التزام أو سلسلة دردشة.

تغطي أدوات المقارنة المجاورة الحالات التي لا يغطيها فرق XML. عندما تكون بياناتك جدولية، فإن فرق CSV يقارن الصفوف والخلايا، وبالنسبة لقائمتين عاديتين، فإن قائمة المقارنة تقوم الأداة بتعيين الاختلافات. إنهم يشتركون في نفس الفلسفة: تحليل البيانات إلى شكلها الطبيعي أولاً، ثم مقارنتها، بحيث يعكس الفرق المعنى بدلاً من التخطيط.

ما هي الحدود، وهل XML الخاص بي خاص؟

تقوم الأداة بمقارنة البنية، مما يعني أنها لا تبلغ عمدًا عن أنواع الاختلافات التي لا تلتقطها البنية. يتم التعامل مع إعادة ترتيب سمتين، أو تغيير المسافة البادئة، أو تبديل بناء الجملة ذاتي الإغلاق على أنها لا تغيير، حسب التصميم. إذا كانت حالة الاستخدام الخاصة بك تحتاج حقًا إلى مقارنة دقيقة بالبايت، فإن فرق النص هو الأداة الصحيحة وهذا ليس كذلك. يقوم الفرق الهيكلي أيضًا بإقران العناصر المتكررة حسب الموضع، لذلك إذا تم خلط نفس السجلات بترتيب مختلف، ترى الأداة أن العناصر المنقولة قد تم تغييرها بدلاً من نقلها؛ فرز كلا الوثيقتين بواسطة مفتاح ثابت أولاً، عندما يكون ذلك منطقيًا، يعطي النتيجة الأنظف.

يتم الإبلاغ عن XML المشوه بدلاً من تخمينه. إذا كان المستند يحتوي على علامة غير متطابقة أو غير مغلقة، أو أكثر من عنصر جذر واحد، فإن الأداة تسمي المشكلة وتخبرك بالجانب الذي جاءت منه، لذلك لن تحصل أبدًا على فرق مضلل من الإدخال المعطل. إنه يتعامل مع بنيات العالم الحقيقي الشائعة التي يجب على المحلل اللغوي القيام بها: السمات في علامات الاقتباس المفردة أو المزدوجة، وعلامات الإغلاق الذاتي، وأقسام CDATA، والتعليقات، وتعليمات المعالجة، ومراجع الكيانات القياسية مثل &lt; و &amp;.

فيما يتعلق بالخصوصية، كل شيء يعمل في متصفحك. يتم تحليل كلا المستندين ومقارنتهما محليًا، ولا يتم تحميل أي شيء أو تسجيله أو تخزينه. هذه هي الخاصية التي تجعل من الآمن تغيير تكوين الإنتاج، أو حمولة واجهة برمجة التطبيقات الداخلية، أو ملف خاص بالعميل، ولا ينتمي أي منها إلى خادم Stranger&#39؛s. ال خصوصية البيانات في الأدوات عبر الإنترنت يشرح الدليل كيفية التحقق من أن الأداة من جانب العميل حقًا، وهو أمر يستحق القيام به قبل لصق أي شيء حساس في أي أداة ويب.

الأسئلة المتداولة

كيف يمكنني مقارنة ملفين XML؟

الصق XML الأصلي في الحقل الأول وXML الذي تم تغييره في الحقل الثاني، ثم اضغط على مقارنة. تقوم الأداة بتوزيع كل من أشجار العقد وتسرد كل عنصر وسمة وقيمة نص تمت إضافتها وإزالتها وتغييرها، ويتم تثبيت كل منها على مسار العقدة الخاصة بها. لا يتم تحميل أي شيء.

كيف يختلف فرق XML عن فرق النص العادي؟

يقارن فرق النص الملفات سطرًا تلو الآخر، لذا فإن إعادة المسافة البادئة أو إعادة ترتيب السمات أو إعادة تغليف الأسطر تجعل كل شيء تقريبًا يبدو متغيرًا. يقوم فرق XML بتوزيع كلا المستندين إلى أشجار أولاً ومقارنتهما هيكليًا، لذلك فهو يُبلغ فقط عن الاختلافات التي من شأنها تغيير كيفية قراءة المحلل اللغوي للمستند.

هل تعتبر إعادة ترتيب السمات بمثابة تغيير؟

لا. تتم مقارنة السمات بالاسم بغض النظر عن الترتيب الذي تظهر به في العلامة، لأن ترتيب السمات ليس مهمًا في XML. يتم الإبلاغ فقط عن قيمة تم تغييرها أو سمة مضافة أو سمة تمت إزالتها.

كيف تتم مطابقة العناصر المتكررة بين الوثيقتين؟

يتم إقران العناصر الفرعية التي تشترك في اسم العلامة حسب ترتيب ظهورها، لذلك تتم مقارنة العنصر الأول بالعنصر الأول، والثاني بالعنصر الثاني، وهكذا. إذا كان أحد المستندات يحتوي على تكرارات أكثر من الآخر، فسيتم الإبلاغ عن الإضافات على أنها تمت إضافتها أو إزالتها.

ماذا يعني مسار العقدة في كل اختلاف؟

يوضح المسار أين يكون التغيير في الشجرة، باستخدام أسماء العناصر، فهرسًا قائمًا على واحد بين قوسين عندما يكون هناك أشقاء يحملون نفس الاسم، @name لسمة، ونص () لمحتوى النص. على سبيل المثال، يشير /catalog/book[2]/@id إلى سمة المعرف للكتاب الثاني.

هل تؤثر المسافات البيضاء أو التنسيق على المقارنة؟

افتراضيًا، يتم تجاهل النص الخاص بالمسافات البيضاء فقط ويتم طي تشغيل المسافات البيضاء داخل النص، لذا فإن إعادة تنسيق المستند لا تؤدي إلى إنشاء اختلافات خاطئة. يمكنك الاعتماد على المقارنة الهيكلية بدلاً من مطابقة المسافة البادئة تمامًا.

ماذا يحدث إذا كان XML مشوهًا؟

تقوم الأداة بالإبلاغ عن خطأ واضح في تسمية المشكلة، مثل علامة غير متطابقة أو غير مغلقة، وتخبرك بالمستند الذي جاءت منه. لا يخمن الإصلاح، لذلك لن تحصل أبدًا على فرق مضلل من الإدخال المعطل.

هل يتم تحميل مستندات XML الخاصة بي في أي مكان؟

لا. تتم جميع عمليات التحليل والمقارنة مثل JavaScript في متصفحك. لا يتم نقل أي شيء أو تسجيله أو تخزينه. يمكنك تأكيد ذلك من خلال مشاهدة علامة تبويب الشبكة أو عن طريق قطع الاتصال بالإنترنت، وتستمر الأداة في العمل دون اتصال بالإنترنت.


قارن مستنداتك الخاصة بالمجان مدقق فرق XML. يقوم بالإبلاغ عن الاختلافات الهيكلية حسب مسار العقدة، بالكامل في متصفحك، دون تحميل أي شيء.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!