ToolDeck

فرمت‌دهنده XML

فرمت‌دهی و چاپ زیبای XML با برجسته‌سازی نحوی

یک مثال امتحان کنید

ورودی XML

XML فرمت‌شده

به‌صورت محلی اجرا می‌شود · جای‌گذاری اسرار امن است
XML فرمت‌شده اینجا نمایش داده می‌شود…

فرمت‌دهی XML چیست؟

فرمت‌دهی XML (که به آن چاپ زیبای XML یا زیباسازی XML نیز می‌گویند) فرآیند افزودن تورفتگی یکدست و شکست خط به یک سند XML است تا ساختار سلسله‌مراتبی آن نمایان شود. XML خام دریافتی از API‌ها، ابزارهای تولید پیکربندی یا سریالایزرها اغلب به صورت یک خط بدون فاصله بین تگ‌ها ارائه می‌شود. یک فرمت‌دهنده XML آن سند را به یک درخت تجزیه می‌کند و سپس با فاصله‌گذاری یکنواخت دوباره تولید می‌کند.

مشخصه XML 1.0 (توصیه W3C، ویرایش پنجم) گرامر دقیقی تعریف می‌کند که در آن هر تگ باز باید تگ بستن متناظر داشته باشد یا خودبسته باشد، مقادیر ویژگی‌ها باید داخل نقل‌قول باشند، و پنج کاراکتر (<، >، &، "، ') نیاز به escape با موجودیت‌های از پیش تعریف‌شده دارند. یک فرمت‌دهنده باید این قوانین را رعایت کند و تنها فاصله‌های غیرمعنایی‌ای اضافه کند که مجموعه اطلاعات (infoset) سند را تغییر نمی‌دهند.

XML فرمت‌شده در بازبینی کد راحت‌تر خوانده می‌شود، در سیستم‌های کنترل نسخه راحت‌تر مقایسه می‌شود، و هنگامی که یک سرویس داده غیرمنتظره برمی‌گرداند اشکال‌زدایی آن آسان‌تر است. عملیات فرمت‌دهی بدون اتلاف است: محتوای منطقی سند یکسان می‌ماند و تنها نمایش آن تغییر می‌کند. ابزارهایی مانند git diff و پلتفرم‌های بازبینی pull request فقط خطوط تغییریافته را نشان می‌دهند — 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 API انجام می‌شود. XML شما هرگز از دستگاه شما خارج نمی‌شود و به هیچ سروری ارسال نمی‌شود.
🎨
تورفتگی قابل تنظیم
بین تورفتگی ۲ فاصله، ۴ فاصله یا tab انتخاب کنید تا با استانداردهای کدنویسی پروژه‌تان تطابق داشته باشد، بدون نیاز به ویرایش فایل‌های پیکربندی.
📋
بدون نیاز به حساب کاربری یا نصب
صفحه را باز کنید، XML خود را الصاق کنید و نتیجه را کپی کنید. بدون فرم ثبت‌نام، بدون نرم‌افزار دسکتاپ، بدون افزونه مرورگر.

موارد استفاده از فرمت‌دهنده XML

توسعه فرانت‌اند
نشانه‌گذاری SVG یا قطعات XHTML برگشتی از یک CMS را بررسی کنید. فرمت‌دهی خروجی خام به شما امکان می‌دهد ویژگی‌های خاص و گروه‌های تودرتو را سریعاً پیدا کنید.
مهندسی بک‌اند
پاسخ‌های SOAP، فیدهای RSS یا پیام‌های XML-RPC از سرویس‌های شخص ثالث را اشکال‌زدایی کنید. خروجی چاپ‌شده زیبا به شما اجازه می‌دهد عناصر گمشده یا فضاهای نام نادرست را ردیابی کنید.
DevOps و CI/CD
فایل‌های Maven pom.xml، اسکریپت‌های Ant build یا فایل‌های پروژه .csproj که به صورت ماشینی بدون تورفتگی تولید شده‌اند را بخوانید. قبل از commit کردن آن‌ها را فرمت دهید تا تفاوت‌ها تمیز بمانند.
تضمین کیفیت و آزمایش
پیام‌های XML مورد انتظار و واقعی را در آزمون‌های یکپارچگی مقایسه کنید. فرمت‌دهی هر دو طرف با همان سبک تورفتگی، نتایج منفی کاذب ناشی از تفاوت‌های فاصله را حذف می‌کند.
مهندسی داده
خروجی‌های XML از پایگاه‌های داده، پایپ‌لاین‌های ETL یا پورتال‌های داده آزاد دولتی را بررسی کنید. XML فرمت‌شده ساختار رکورد را قبل از نوشتن تبدیل XSLT یا کوئری XPath آشکار می‌کند.
یادگیری XML
دانشجویانی که آموزش‌های XML سایت W3C را دنبال می‌کنند می‌توانند فایل‌های تمرینی را در فرمت‌دهنده الصاق کنند تا صحت تودرتویی و نحو ویژگی‌هایشان را تأیید کنند.

مرجع موجودیت‌های از پیش تعریف‌شده 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. اسناد با تودرتویی عمیق را فشرده نگه می‌دارد. به طور پیش‌فرض در اکثر فرمت‌دهنده‌های آنلاین و IDE‌ها استفاده می‌شود.
۴ فاصله
در اکوسیستم‌های Java (Maven، Ant، مانیفست‌های Android) ترجیح داده می‌شود که فایل‌ها به ندرت از ۳ تا ۴ سطح تودرتو تجاوز می‌کنند. با تورفتگی پیش‌فرض کد 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 چیست؟
فرمت‌دهی تورفتگی و شکست خط اضافه می‌کند تا XML خوانا باشد. اعتبارسنجی بررسی می‌کند که آیا سند با یک طرحواره (XSD، DTD یا RelaxNG) مطابقت دارد یا خیر. یک سند می‌تواند خوش‌فرم باشد اما در برابر طرحواره‌اش نامعتبر باشد. از این فرمت‌دهنده برای خوانایی و از ابزار XML Validator برای انطباق با طرحواره استفاده کنید.
آیا می‌توانم XML با فضاهای نام را فرمت دهم؟
بله. DOMParser مرورگر به صورت بومی فضاهای نام XML را مدیریت می‌کند. پیشوندهای فضای نام، اعلان‌های فضای نام پیش‌فرض (xmlns) و نام‌های ویژگی واجد شرایط همگی در حین فرمت‌دهی حفظ می‌شوند. فرمت‌دهنده هیچ اتصال فضای نامی را اضافه، حذف یا تغییر نام نمی‌دهد.
تا چه اندازه‌ای از فایل XML می‌توانم در مرورگر فرمت دهم؟
فرمت‌دهی مبتنی بر مرورگر برای اسناد تا حدود ۱۰ مگابایت به خوبی کار می‌کند. فراتر از آن، درخت DOM حافظه قابل توجهی مصرف می‌کند و رابط کاربری ممکن است کند شود. برای فایل‌های بسیار بزرگ از ابزار خط فرمانی مانند xmllint --format استفاده کنید که XML را به صورت جریانی پردازش می‌کند.
چرا XML فرمت‌شده من یک اعلان XML اضافه دارد؟
برخی فرمت‌دهنده‌ها هنگام سریال‌سازی درخت DOM، <?xml version="1.0"?> را اضافه می‌کنند. این اعلان در XML 1.0 هنگامی که رمزگذاری UTF-8 است اختیاری است. اگر آن را نمی‌خواهید، خط اول خروجی را حذف کنید. این اعلان تأثیری بر تجزیه توسط هیچ پردازنده XML منطبقی ندارد.
آیا فرمت‌دهی XML همان فشرده‌سازی XML است؟
آن‌ها عملیات معکوس هم هستند. فرمت‌دهی فاصله اضافه می‌کند تا خوانایی بهبود یابد. فشرده‌سازی تمام فاصله‌های غیرضروری را حذف می‌کند تا حجم فایل کاهش یابد. هر دو عملیات نسبت به مجموعه اطلاعات XML بدون اتلاف هستند. اگر نیاز به فشرده‌سازی XML دارید، از ابزار XML Minifier استفاده کنید.
تفاوت بین فرمت‌دهی XML و HTML چیست؟
XML سختگیرانه است: هر تگ باید بسته شود، مقادیر ویژگی باید داخل نقل‌قول باشند، و سند باید دقیقاً یک عنصر ریشه داشته باشد. HTML (به‌ویژه HTML5) انعطاف‌پذیر است: تگ‌های بستن اختیاری، ویژگی‌های بدون نقل‌قول، و عناصر خالی مانند &lt;br&gt; همگی معتبر هستند. یک فرمت‌دهنده XML، XML نامعتبر را رد می‌کند، در حالی که یک فرمت‌دهنده HTML نحوی را که XML اجازه نمی‌دهد تحمل می‌کند.