ToolDeck

ตัวจัดรูปแบบ XML

จัดรูปแบบและทำให้ XML สวยงามพร้อมการเน้นไวยากรณ์

ลองตัวอย่าง

ป้อนข้อมูล XML

XML ที่จัดรูปแบบแล้ว

ประมวลผลในเครื่อง · ปลอดภัยในการวางข้อมูลลับ
XML ที่จัดรูปแบบแล้วจะปรากฏที่นี่…

XML Formatting คืออะไร?

XML formatting (หรือที่เรียกว่า XML pretty-printing หรือ XML beautification) คือกระบวนการเพิ่มการย่อหน้าและการขึ้นบรรทัดใหม่ที่สม่ำเสมอให้กับเอกสาร XML เพื่อให้โครงสร้างแบบลำดับชั้นมองเห็นได้ชัดเจน XML ดิบจาก API ตัวสร้าง config หรือ serializer มักถูกส่งมาในบรรทัดเดียวโดยไม่มีช่องว่างระหว่าง tag ตัวจัดรูปแบบ XML จะแยกวิเคราะห์เอกสารนั้นเป็น tree แล้ว serialize ใหม่พร้อมระยะห่างที่คาดเดาได้

ข้อกำหนด XML 1.0 (W3C Recommendation ฉบับที่ห้า) กำหนด grammar ที่เข้มงวด โดย opening tag ทุกตัวต้องมี closing tag ที่ตรงกันหรือเป็น self-closing, attribute ต้องอยู่ในเครื่องหมายอัญประกาศ และอักขระห้าตัว (<, >, &, ", ') ต้องใช้ entity escaping ตัวจัดรูปแบบต้องปฏิบัติตามกฎเหล่านี้ขณะแทรกเฉพาะช่องว่างที่ไม่มีนัยสำคัญซึ่งไม่เปลี่ยนแปลง information set (infoset) ของเอกสาร

XML ที่จัดรูปแบบแล้วอ่านง่ายขึ้นระหว่าง code review, diff ง่ายขึ้นใน version control และ debug ได้ง่ายขึ้นเมื่อ service ส่งข้อมูลที่ไม่คาดคิด การดำเนินการจัดรูปแบบนั้น lossless: เนื้อหาเชิงตรรกะของเอกสารยังคงเหมือนเดิม เปลี่ยนเพียงการนำเสนอ เครื่องมืออย่าง git diff และแพลตฟอร์ม pull-request review จะแสดงเฉพาะบรรทัดที่แก้ไข — XML ที่ย่อหน้าสม่ำเสมอทำให้ diff เหล่านั้นสะท้อนการเปลี่ยนแปลงจริง ไม่ใช่แค่การจัดรูปแบบใหม่

Before · xml
After · 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 ด้วยตนเองเกิดข้อผิดพลาดได้ง่ายและใช้เวลานาน โดยเฉพาะเอกสารที่มีการซ้อนลึกหรือ namespace ผสมกัน ตัวจัดรูปแบบบนเบราว์เซอร์ให้ผลลัพธ์ที่จัดรูปแบบแล้วในไม่กี่วินาที ไม่ว่าไฟล์จะมีขนาดเท่าใด

Pretty-print ทันที
วางหรือพิมพ์ XML แล้วรับผลลัพธ์ที่มีการย่อหน้าทันที ไม่ต้องรอติดตั้ง CLI หรือรันขั้นตอน build
🔒
ประมวลผลโดยให้ความเป็นส่วนตัวก่อน
การแยกวิเคราะห์และการจัดรูปแบบทั้งหมดเกิดขึ้นในเบราว์เซอร์โดยใช้ DOMParser API ข้อมูล XML ของคุณไม่เคยออกจากเครื่องและไม่เคยถูกส่งไปยังเซิร์ฟเวอร์ใด
🎨
ปรับแต่งการย่อหน้าได้
เลือกระหว่างการย่อหน้า 2 ช่องว่าง, 4 ช่องว่าง หรือ tab เพื่อให้ตรงกับมาตรฐานการเขียนโค้ดของโปรเจกต์ โดยไม่ต้องแก้ไขไฟล์ config
📋
ไม่ต้องมีบัญชีหรือติดตั้ง
เปิดหน้า วาง XML และคัดลอกผลลัพธ์ ไม่มีแบบฟอร์มลงทะเบียน ไม่มีซอฟต์แวร์บนเดสก์ท็อป ไม่มีส่วนขยายเบราว์เซอร์

กรณีการใช้งานตัวจัดรูปแบบ XML

การพัฒนา frontend
ตรวจสอบมาร์กอัป SVG หรือ XHTML fragment ที่ส่งมาจาก CMS การจัดรูปแบบผลลัพธ์ดิบช่วยให้คุณค้นหา attribute เฉพาะและกลุ่มที่ซ้อนกันได้รวดเร็ว
วิศวกรรม backend
debug SOAP response, RSS feed หรือ XML-RPC payload จากบริการของบุคคลที่สาม ผลลัพธ์ที่ pretty-print ช่วยให้คุณตามหา element ที่ขาดหายหรือ namespace ที่ไม่ถูกต้อง
DevOps และ CI/CD
อ่านไฟล์ Maven pom.xml, Ant build script หรือไฟล์โปรเจกต์ .csproj ที่ถูกสร้างโดยเครื่องโดยไม่มีการย่อหน้า จัดรูปแบบก่อน commit เพื่อให้ diff สะอาด
QA และการทดสอบ
เปรียบเทียบ XML payload ที่คาดหวังกับผลลัพธ์จริงใน integration test การจัดรูปแบบทั้งสองด้านด้วยรูปแบบการย่อหน้าเดียวกันช่วยขจัด false negative ที่เกิดจากความแตกต่างของช่องว่าง
วิศวกรรมข้อมูล
ตรวจสอบการส่งออก XML จากฐานข้อมูล, ETL pipeline หรือพอร์ทัลข้อมูลเปิดของรัฐบาล XML ที่จัดรูปแบบแล้วเผยให้เห็นโครงสร้าง record ก่อนที่คุณจะเขียน XSLT transform หรือ XPath query
การเรียนรู้ XML
นักเรียนที่ศึกษา XML tutorial ของ W3C สามารถวางไฟล์แบบฝึกหัดลงในตัวจัดรูปแบบเพื่อตรวจสอบว่าการซ้อนและไวยากรณ์ attribute ของตนถูกต้อง

ตารางอ้างอิง Entity ที่กำหนดไว้ล่วงหน้าใน XML

XML สงวนอักขระห้าตัวไว้สำหรับไวยากรณ์ของตน เมื่ออักขระเหล่านี้ปรากฏเป็นเนื้อหาข้อความหรือค่า attribute ต้องแทนที่ด้วย entity reference ที่กำหนดไว้ล่วงหน้า ตัวจัดรูปแบบที่ถูกต้องจะรักษา entity เหล่านี้ระหว่าง pretty-printing

อักขระบทบาทใน XMLEntity
<Start of tag&lt;
>End of tag&gt;
&Start of entity&amp;
"Attribute delimiter&quot;
'Attribute delimiter&apos;

การเปรียบเทียบรูปแบบการย่อหน้าใน XML

ไม่มีมาตรฐานเดียวสำหรับการย่อหน้า XML การเลือกขึ้นอยู่กับข้อตกลงของทีมและเครื่องมือใน pipeline นี่คือสามรูปแบบที่พบบ่อยที่สุด

2 ช่องว่าง (แนะนำ)
ตัวเลือกที่พบบ่อยที่สุดสำหรับ XML ที่เกี่ยวกับเว็บ: SVG, XHTML, SOAP, Spring config ทำให้เอกสารที่ซ้อนลึกกระชับ ใช้เป็นค่าเริ่มต้นในตัวจัดรูปแบบออนไลน์และ IDE ส่วนใหญ่
4 ช่องว่าง
นิยมใช้ใน Java ecosystem (Maven, Ant, Android manifest) ซึ่งไฟล์มักไม่เกิน 3-4 ระดับการซ้อน ตรงกับการย่อหน้าเริ่มต้นของโค้ด Java และ C#
อักขระ tab
ให้นักพัฒนาแต่ละคนกำหนดความกว้างภาพได้เองใน editor พบบ่อยในโปรเจกต์เก่าและเครื่องมือ Microsoft บางตัว (.csproj, .nuspec) ขนาดไฟล์เล็กกว่าการใช้ช่องว่าง

ตัวอย่างโค้ด: จัดรูปแบบ XML ด้วยโปรแกรม

เมื่อต้องการจัดรูปแบบ XML ภายใน script หรือกระบวนการ build ทุกภาษาหลักมีตัวเลือกในตัวหรือ standard library ด้านล่างคือตัวอย่างที่ใช้งานได้ซึ่งคุณสามารถคัดลอกไปใช้ได้โดยตรง

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 เพียงเพิ่มหรือลบช่องว่างที่ไม่มีนัยสำคัญระหว่าง tag XML Information Set (infoset) ยังคงเหมือนเดิม ข้อยกเว้นหนึ่ง: หาก schema ของคุณใช้ xml:space="preserve" บน element บางตัว ตัวจัดรูปแบบควรปล่อย element เหล่านั้นไว้โดยไม่แตะต้อง และเครื่องมือนี้ปฏิบัติตามกฎดังกล่าว
ความแตกต่างระหว่างการจัดรูปแบบ XML และการตรวจสอบ XML คืออะไร?
การจัดรูปแบบเพิ่มการย่อหน้าและการขึ้นบรรทัดใหม่เพื่อให้ XML อ่านง่าย การตรวจสอบตรวจว่าเอกสารเป็นไปตาม schema (XSD, DTD หรือ RelaxNG) หรือไม่ เอกสารอาจ well-formed แต่ไม่ valid กับ schema ใช้ตัวจัดรูปแบบนี้เพื่อความสะดวกในการอ่าน และใช้เครื่องมือ XML Validator สำหรับการตรวจสอบ schema
สามารถจัดรูปแบบ XML ที่มี namespace ได้หรือไม่?
ได้ DOMParser ของเบราว์เซอร์จัดการ XML namespace โดยธรรมชาติ Namespace prefix, การประกาศ namespace เริ่มต้น (xmlns) และชื่อ attribute ที่มี qualifier ทั้งหมดถูกรักษาไว้ระหว่างการจัดรูปแบบ ตัวจัดรูปแบบไม่เพิ่ม ลบ หรือเปลี่ยนชื่อ namespace binding ใดๆ
ไฟล์ XML ขนาดใหญ่แค่ไหนที่จัดรูปแบบในเบราว์เซอร์ได้?
การจัดรูปแบบบนเบราว์เซอร์ทำงานได้ดีกับเอกสารขนาดถึงประมาณ 10 MB หากเกินกว่านั้น DOM tree จะใช้หน่วยความจำมากและ UI อาจตอบสนองช้า สำหรับไฟล์ขนาดใหญ่มาก ให้ใช้ CLI tool อย่าง xmllint --format ซึ่งประมวลผล XML แบบ stream
ทำไม XML ที่จัดรูปแบบแล้วจึงมี XML declaration เพิ่มเข้ามา?
ตัวจัดรูปแบบบางตัวเพิ่ม <?xml version="1.0"?> ไว้ด้านหน้าเมื่อ serialize DOM tree การประกาศนี้เป็นตัวเลือกใน XML 1.0 เมื่อ encoding เป็น UTF-8 หากไม่ต้องการ ให้ลบบรรทัดแรกออกจากผลลัพธ์ การประกาศนี้ไม่กระทบการแยกวิเคราะห์โดย XML processor ที่สอดคล้องใดๆ
การจัดรูปแบบ XML เหมือนกับการย่อขนาด XML หรือไม่?
เป็นการดำเนินการที่ตรงข้ามกัน การจัดรูปแบบเพิ่มช่องว่างเพื่อปรับปรุงความสะดวกในการอ่าน การย่อขนาดลบช่องว่างที่ไม่จำเป็นทั้งหมดเพื่อลดขนาดไฟล์ ทั้งสองการดำเนินการ lossless เมื่อเทียบกับ XML infoset หากต้องการย่อขนาด XML ให้ใช้เครื่องมือ XML Minifier
ความแตกต่างระหว่างการจัดรูปแบบ XML และ HTML คืออะไร?
XML เข้มงวด: ทุก tag ต้องปิด ค่า attribute ต้องอยู่ในเครื่องหมายอัญประกาศ และเอกสารต้องมี root element เพียงหนึ่งตัว HTML (โดยเฉพาะ HTML5) ผ่อนปรน: closing tag ที่ไม่บังคับ attribute ที่ไม่มีเครื่องหมายอัญประกาศ และ void element อย่าง &lt;br&gt; ล้วนถูกต้อง ตัวจัดรูปแบบ XML จะปฏิเสธ XML ที่ไม่ถูกต้อง ในขณะที่ตัวจัดรูปแบบ HTML ยอมรับไวยากรณ์ที่ XML ไม่อนุญาต