ToolDeck

منسّق XML

تنسيق XML وطباعته بصورة جميلة مع تمييز صياغي

جرب مثالاً

إدخال XML

XML منسّق

يعمل محليًا · آمن للصق الأسرار
سيظهر XML المنسّق هنا…

ما هو تنسيق XML؟

تنسيق XML (المعروف أيضًا بالطباعة الجميلة لـXML أو تجميل XML) هو عملية إضافة مسافات بادئة وفواصل أسطر متسقة إلى مستند XML بحيث تتضح بنيته الهرمية. كثيرًا ما يُسلَّم XML الخام الوارد من واجهات برمجة التطبيقات أو مولّدات الضبط أو أدوات التسلسل في سطر واحد دون أي مسافات بيضاء بين الوسوم. يُحلّل منسّق XML المستند إلى شجرة، ثم يُعيد تسلسله بتباعد منتظم وقابل للتنبؤ.

تحدد مواصفة XML 1.0 (توصية W3C، الطبعة الخامسة) قواعد نحوية صارمة: يجب أن يكون لكل وسم افتتاحي وسم إغلاق مطابق أو أن يكون وسمًا ذاتي الإغلاق، ويجب أن تكون قيم الخصائص بين علامات اقتباس، وتستلزم خمسة أحرف (<، >، &، "، ') الاستعاضة عنها بكيانات محددة مسبقًا. يجب أن يحترم المنسّق هذه القواعد مع إدراج مسافات بيضاء غير ذات دلالة لا تؤثر في مجموعة المعلومات (infoset) للمستند.

يسهل قراءة XML المنسّق أثناء مراجعة الكود، ويُبسّط مقارنة الفروق في نظام التحكم في الإصدارات، ويُيسّر تصحيح الأخطاء حين تُعيد خدمة ما بيانات غير متوقعة. عملية التنسيق نفسها لا تنطوي على أي فقدان للمحتوى: يبقى المحتوى المنطقي للمستند مطابقًا، ولا يتغير سوى العرض التقديمي. تُظهر أدوات مثل git diff ومنصات مراجعة طلبات السحب الأسطر المعدّلة فقط — وXML المنسّق باتساق يضمن أن تعكس الفروق تغييرات حقيقية لا ضوضاء إعادة التنسيق.

After · xml
Before · xml
<catalog>
  <book id="bk101">
    <author>Gambardella, Matthew</author>
    <title>XML Developer's Guide</title>
    <genre>Computer</genre>
    <price>44.95</price>
    <publish_date>2000-10-01</publish_date>
  </book>
  <book id="bk102">
    <author>Ralls, Kim</author>
    <title>Midnight Rain</title>
    <genre>Fantasy</genre>
    <price>5.95</price>
    <publish_date>2000-12-16</publish_date>
  </book>
</catalog>
<catalog><book id="bk101"><author>Gambardella, Matthew</author><title>XML Developer's Guide</title><genre>Computer</genre><price>44.95</price><publish_date>2000-10-01</publish_date></book><book id="bk102"><author>Ralls, Kim</author><title>Midnight Rain</title><genre>Fantasy</genre><price>5.95</price><publish_date>2000-12-16</publish_date></book></catalog>

لماذا تستخدم منسّق XML الإلكتروني؟

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

طباعة جميلة فورية
الصق XML أو اكتبه لتحصل على مخرجات ذات مسافات بادئة في الحال. لا حاجة للانتظار لتثبيت أداة سطر أوامر أو تنفيذ خطوة بناء.
🔒
معالجة تُقدّم الخصوصية أولًا
تتم جميع عمليات التحليل والتنسيق في متصفحك باستخدام واجهة DOMParser. لا يغادر XML الخاص بك جهازك أبدًا ولا يُرسَل إلى أي خادم.
🎨
مسافات بادئة قابلة للضبط
اختر بين مسافتين أو 4 مسافات أو مسافة جدولة لتتوافق مع معايير ترميز مشروعك دون الحاجة إلى تعديل ملفات الضبط.
📋
لا حساب ولا تثبيت مطلوب
افتح الصفحة، والصق XML الخاص بك، وانسخ النتيجة. لا نماذج تسجيل، ولا تثبيت لأي برامج، ولا امتدادات متصفح.

حالات استخدام منسّق XML

تطوير الواجهة الأمامية
افحص ترميز SVG أو أجزاء XHTML الواردة من نظام إدارة المحتوى. يتيح لك تنسيق المخرجات الخام تحديد خصائص وأجزاء متداخلة محددة بسرعة.
هندسة الواجهة الخلفية
صحّح استجابات SOAP وخلاصات RSS وحمولات XML-RPC من الخدمات الخارجية. تتيح لك المخرجات المنسّقة تتبع العناصر المفقودة أو مساحات الأسماء الخاطئة.
DevOps والتكامل المستمر
اقرأ ملفات Maven pom.xml وسكربتات Ant أو ملفات .csproj التي أنشأتها الآلة دون مسافات بادئة. نسّقها قبل الإيداع للحفاظ على نظافة الفروق.
ضمان الجودة والاختبار
قارن بين حمولات XML المتوقعة والفعلية في اختبارات التكامل. يُلغي تنسيق الجانبين بنمط مسافات بادئة موحّد النتائج السلبية الزائفة الناجمة عن اختلافات المسافات البيضاء.
هندسة البيانات
افحص مصدّرات XML من قواعد البيانات أو خطوط أنابيب ETL أو بوابات البيانات المفتوحة الحكومية. يكشف XML المنسّق بنية السجلات قبل كتابة تحويل XSLT أو استعلام XPath.
تعلّم XML
يمكن للطلاب الذين يدرسون دروس W3C XML لصق ملفات التمارين في المنسّق للتحقق من صحة بنية التداخل وصياغة الخصائص لديهم.

مرجع الكيانات المحددة مسبقًا في XML

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

الحرفالدور في XMLالكيان
<Start of tag&lt;
>End of tag&gt;
&Start of entity&amp;
"Attribute delimiter&quot;
'Attribute delimiter&apos;

مقارنة أنماط مسافات XML البادئة

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

مسافتان (موصى به)
الخيار الأكثر شيوعًا لـXML المتعلق بالويب: SVG وXHTML وSOAP وضبط Spring. يُبقي المستندات ذات التداخل العميق مضغوطة. يُستخدم افتراضيًا في معظم المنسّقات الإلكترونية وبيئات التطوير المتكاملة.
4 مسافات
مفضّل في بيئات Java (Maven وAnt ومانيفست Android) حيث نادرًا ما تتجاوز الملفات 3-4 مستويات من التداخل. يتوافق مع المسافة البادئة الافتراضية لكود Java وC#.
حرف الجدولة (Tab)
يتيح لكل مطوّر تحديد عرضه البصري المفضّل في محرره. شائع في المشاريع القديمة وبعض أدوات Microsoft (ملفات .csproj و.nuspec). يُنتج أحجام ملفات أصغر مقارنةً بالمسافات.

أمثلة على الكود: تنسيق XML برمجيًا

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

JavaScript (DOM API)
const raw = '<root><item>hello</item></root>'
const parser = new DOMParser()
const doc = parser.parseFromString(raw, 'application/xml')
const serializer = new XMLSerializer()
const xml = serializer.serializeToString(doc)

// Indent with XSLT (browser-native approach)
const xslt = new DOMParser().parseFromString(`
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="node()|@*">
      <xsl:copy><xsl:apply-templates select="node()|@*"/></xsl:copy>
    </xsl:template>
  </xsl:stylesheet>`, 'application/xml')

const proc = new XSLTProcessor()
proc.importStylesheet(xslt)
const formatted = proc.transformToDocument(doc)
console.log(new XMLSerializer().serializeToString(formatted))
// → <root>\n  <item>hello</item>\n</root>
Python
import xml.dom.minidom

raw = '<root><item>hello</item><item>world</item></root>'
dom = xml.dom.minidom.parseString(raw)
print(dom.toprettyxml(indent='  '))
# → <?xml version="1.0" ?>
# → <root>
# →   <item>hello</item>
# →   <item>world</item>
# → </root>

# With lxml (handles namespaces, XSD, large files)
from lxml import etree
tree = etree.fromstring(raw.encode())
print(etree.tostring(tree, pretty_print=True).decode())
Go
package main

import (
    "encoding/xml"
    "fmt"
    "strings"
)

func formatXML(raw string) (string, error) {
    decoder := xml.NewDecoder(strings.NewReader(raw))
    var out strings.Builder
    encoder := xml.NewEncoder(&out)
    encoder.Indent("", "  ")
    for {
        tok, err := decoder.Token()
        if err != nil {
            break
        }
        encoder.EncodeToken(tok)
    }
    encoder.Flush()
    return out.String(), nil
}
// formatXML("<a><b>1</b></a>") → "<a>\n  <b>1</b>\n</a>"
CLI (xmllint)
# Format XML file with xmllint (part of libxml2, pre-installed on macOS/Linux)
xmllint --format input.xml > formatted.xml

# Format from stdin
echo '<a><b>1</b></a>' | xmllint --format -
# → <?xml version="1.0"?>
# → <a>
# →   <b>1</b>
# → </a>

# Validate and format at the same time
xmllint --format --schema schema.xsd input.xml

الأسئلة الشائعة

هل يُغيّر تنسيق XML معنى المستند؟
لا. يُضيف تنسيق XML مسافات بيضاء غير ذات دلالة بين الوسوم أو يحذفها فقط. تبقى مجموعة معلومات XML (infoset) مطابقة. استثناء واحد: إذا كان مخططك يستخدم xml:space="preserve" على عناصر معينة، يجب على المنسّق ترك تلك العناصر دون تغيير، وهذا ما تفعله هذه الأداة.
ما الفرق بين تنسيق XML والتحقق من صحته؟
يُضيف التنسيق مسافات بادئة وفواصل أسطر لجعل XML مقروءًا. أما التحقق من الصحة فيتحقق مما إذا كان المستند مطابقًا لمخطط (XSD أو DTD أو RelaxNG). قد يكون المستند سليم التركيب لكنه غير صالح وفق مخططه. استخدم هذا المنسّق لتحسين القراءة وأداة التحقق من XML للتحقق من المطابقة مع المخطط.
هل يمكنني تنسيق XML بمساحات الأسماء؟
نعم. يتعامل DOMParser في المتصفح مع مساحات أسماء XML بشكل أصلي. تُحفظ بادئات مساحات الأسماء وتصريحات مساحة الاسم الافتراضية (xmlns) وأسماء الخصائص المؤهَّلة أثناء التنسيق. لا يُضيف المنسّق أي ربط لمساحات الأسماء ولا يحذفه ولا يعيد تسميته.
ما أقصى حجم لملف XML يمكن تنسيقه في المتصفح؟
يعمل التنسيق المستند إلى المتصفح بكفاءة مع المستندات التي يبلغ حجمها نحو 10 ميجابايت. تجاوز هذا الحجم قد يستهلك شجرة DOM قدرًا كبيرًا من الذاكرة وقد تصبح واجهة المستخدم غير مستجيبة. بالنسبة للملفات الكبيرة جدًا، استخدم أداة سطر أوامر مثل xmllint --format التي تعالج XML كدفق.
لماذا يُضاف تصريح XML إلى XML المنسَّق؟
تُلحق بعض المنسّقات <?xml version="1.0"?> عند تسلسل شجرة DOM. هذا التصريح اختياري في XML 1.0 عند استخدام ترميز UTF-8. إن لم تكن تريده، احذف السطر الأول من المخرجات. لا يؤثر التصريح على التحليل من قِبَل أي معالج XML متوافق.
هل تنسيق XML مطابق لضغط XML؟
كلاهما عمليتان متضادتان. يُضيف التنسيق مسافات بيضاء لتحسين القراءة. أما الضغط فيحذف جميع المسافات البيضاء غير الأساسية لتقليل حجم الملف. كلتا العمليتين لا تنطويان على فقدان بالنسبة لمجموعة معلومات XML. إذا كنت تحتاج إلى ضغط XML، استخدم أداة ضاغط XML.
ما الفرق بين تنسيق XML وتنسيق HTML؟
XML صارم: يجب إغلاق كل وسم، ويجب أن تكون قيم الخصائص بين علامات اقتباس، ويجب أن يحتوي المستند على عنصر جذر واحد بالضبط. أما HTML (وتحديدًا HTML5) فهو متسامح: وسوم الإغلاق الاختيارية، والخصائص غير المقتبسة، والعناصر الفارغة مثل &lt;br&gt; كلها صالحة. سيرفض منسّق XML ملفات XML غير الصالحة، بينما يتسامح منسّق HTML مع صياغة لا يقبلها XML.